2011-12-19 26 views
7

tôi đã cố gắng để xác định này chung chung nhưng tôi nhận được nhiều lỗi:Làm thế nào để chỉ định một chung chung với một nơi?

public void AddOrUpdate(T item, V repo) where T: IAuditableTable, V: IAzureTable<TableServiceEntity> 
    { 
     try 
     { 
      V.AddOrUpdate(item); 
     } 
     catch (Exception ex) 
     { 
      _ex.Errors.Add("", "Error when adding account"); 
      throw _ex; 
     } 
    } 

Ví dụ ":" ngay sau khi V trên dòng đầu tiên đưa ra một lỗi:

Error 3 ; expected 

cộng các lỗi khác :

Error 2 Constraints are not allowed on non-generic declarations 
Error 6 Invalid token ')' in class, struct, or interface member declaration 
Error 5 Invalid token '(' in class, struct, or interface member declaration 
Error 7 A namespace cannot directly contain members such as fields or methods 
Error 8 Type or namespace definition, or end-of-file expected 

Có điều gì đó rõ ràng sai với mã hóa chung của tôi không?

Cập nhật:

tôi thực hiện thay đổi và mã ngay bây giờ trông như thế này:

public void AddOrUpdate<T, V>(T item, V repo) 
     where T : Microsoft.WindowsAzure.StorageClient.TableServiceEntity 
     where V : IAzureTable<TableServiceEntity> 
    { 
     try 
     { 
      repo.AddOrUpdate(item); 
     } 
     catch (Exception ex) 
     { 
      _ex.Errors.Add("", "Error when adding account"); 
      throw _ex; 
     } 
    } 

Gọi nó từ lớp có nguồn gốc:

public void AddOrUpdate(Account account) 
    { 
     base.AddOrUpdate<Account, IAzureTable<Account>>(account, _accountRepository); 
    } 
+6

Bạn nên có lẽ 'ném; 'đây khá hơn' ném cũ; '. Nếu không, bạn sẽ tung ra dấu vết ngăn xếp ban đầu. –

Trả lời

12

Bạn cần một giây where cho V:

public void AddOrUpdate<T, V>(T item, V repo) 
    where T : IAuditableTable 
    where V : IAzureTable<TableServiceEntity> 

Mỗi where liệt kê các ràng buộc cho một tham số kiểu đơn. Lưu ý rằng tôi cũng đã thêm các tham số kiểu vào phương thức - nếu không trình biên dịch sẽ tìm kiếm các loại bình thường và không hiểu tại sao bạn đang cố gắng hạn chế chúng.

+0

Cảm ơn Jon. Điều này rất khác với một phương pháp được đề xuất cho tôi. Tôi sẽ thử nó ngay bây giờ. –

+0

Tôi hiện đã giảm từ 8 lỗi xuống chỉ một lỗi trỏ đến "V.AddOrUpdate (mục)" và nói: Lỗi 'V' là 'tham số kiểu', không hợp lệ trong ngữ cảnh đã cho –

+0

@SamanthaJ: Đúng vậy, và đó là câu trả lời của Jamiec là thích hợp ... trừ khi bạn đang cố gắng gọi một phương thức * tĩnh * như thế, điều này không hiệu quả. –

5

Một vài điều có vẻ sai.

1) Như @ Jon nói, bạn cần phải riêng biệt where khoản

2) Bạn cần phải xác định Generics trên phương pháp:

public void AddOrUpdate<T,V>(T item, V repo) where .... 

3) Bạn đang cố gắng gọi một phương thức trên loại V không phải là kiểu của loại này repo. ví dụ này:

V.AddOrUpdate(item); 

nên

repo.AddOrUpdate(item); 
Các vấn đề liên quan