2011-11-03 39 views
6

Tôi đang phát triển giao diện cho một dự án mẫu tôi muốn nó được như chung càng tốt vì vậy tôi đã tạo ra một giao diện như dưới đâyLàm thế nào để tôi trở lại IEnumerable <T> từ một phương pháp

public interface IUserFactory 
{  
    IEnumerable<Users> GetAll(); 
    Users GetOne(int Id); 
} 

nhưng sau đó nó đã xảy ra tôi đã phải lặp lại giao diện để làm dưới đây

public interface IProjectFactory 
{  
    IEnumerable<Projects> GetAll(User user); 
    Project GetOne(int Id); 
} 

nếu bạn nhìn vào sự khác biệt ở trên chỉ là loại họ trở về, vì vậy tôi tạo ra một cái gì đó như dưới đây chỉ để tìm tôi nhận được lỗi Cannot Resolve Symbol Tam i làm gì sai

public interface IFactory 
{  
    IEnumerable<T> GetAll(); 
    T GetOne(int Id); 
} 

Trả lời

11

Bạn cần phải sử dụng một generic interface/class, không chỉ generic methods:

public interface IFactory<T> 
{  
    IEnumerable<T> GetAll(); 
    T GetOne(int Id); 
} 

Xác định một kiểu generic trên giao diện/class đảm bảo kiểu được biết trong suốt lớp (bất cứ nơi nào bộ định kiểu được sử dụng).

+1

1 chấp nhận, đánh giá cao và lưu 30 phút từ ngày tôi – Deeptechtons

+0

btw là này giống như anwer của bạn 'công cộng giao diện IFactory { IEnumerable GetAll(); Gõ GetOne (int Id); } ' – Deeptechtons

+2

@Deeptechtons - Hầu như. 'Loại' là một tên lớp .NET thực tế, do đó, điều này có thể xuất hiện không rõ ràng. Nhưng tên của tham số kiểu chung có thể là bất cứ thứ gì. – Oded

10

Khai báo kiểu trên giao diện:

public interface IFactory<T> 
+0

+1 cho dù bạn là giống như Oded của, tôi yêu theo cách của mình để giải thích với tài liệu tham khảo. – Deeptechtons

2

Trình biên dịch không thể phỏng đoán T là gì. Bạn cũng cần khai báo nó ở cấp lớp.

Hãy thử:

public interface IFactory<T> 
{ 
    IEnumerable<T> GetAll(); 
    T GetOne(int Id); 
} 
Các vấn đề liên quan