2011-11-03 10 views
6

Zajmuję interfejs do projektu próbki chciałem go mieć jako rodzajowy, jak to możliwe, więc stworzył interfejs jak poniżejJak mogę powrócić IEnumerable <T> od sposobu

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

ale potem to się stało musiałem powielać interfejs zrobić poniżej

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

jeśli spojrzał na powyższej różnicy jest tylko typy wrócą, więc stworzył coś takiego jak poniżej tylko znaleźć mi się błąd Cannot Resolve Symbol TCo robię źle

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

Odpowiedz

11

Trzeba użyć rodzajowe interface/class, nie tylko generic methods:

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

definiująca typ rodzajowy na interfejsie/class zapewnia, że ​​typ jest znany w całej klasie (wszędzie tam, gdzie używany jest specyfikator typu).

+1

+1 zaakceptowany, doceniony i zapisany 30 minut od mojego dnia – Deeptechtons

+0

btw jest taki sam jak twój publiczny interfejs publiczny IFFLER { IEnumerable GetAll(); Wpisz GetOne (int Id); } ' – Deeptechtons

+2

@Deeptechtons - Prawie. 'Type' jest rzeczywistą nazwą klasy .NET, więc może wydawać się niejednoznaczna. Ale nazwa parametru rodzajowego może być dowolna. – Oded

10

zadeklarować typ na interfejsie:

public interface IFactory<T> 
+0

+1 chociaż twój jest taki sam, jak Oded'S, uwielbiałem jego sposób wyjaśniania z odniesieniem. – Deeptechtons

2

Kompilator nie może wywnioskować, do czego służy T. Musisz również zadeklarować to na poziomie klasy.

Spróbuj:

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