2011-11-03 19 views
6

estoy desarrollando interfaz para un proyecto de ejemplo que quería que fuera lo más genérica posible así que creé una interfaz como la de abajo¿Cómo regreso IEnumerable <T> de un método

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

pero entonces sucedió lo que tenía que duplicar la interfaz para hacer más adelante

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

si uno mira a diferencia anterior es sólo tipos que regresan, así que creó algo, como a continuación sólo para encontrar que consigo error Cannot Resolve Symbol T¿Qué estoy haciendo mal

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

Respuesta

11

Es necesario utilizar un genérico interface/class, no sólo generic methods:

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

Definición de un tipo genérico en la interfaz/class garantiza que el tipo sea conocido en toda la clase (siempre que se use el especificador de tipo).

+1

1 aceptado, apreciado y guardado a 30 minutos de mi día – Deeptechtons

+0

por cierto es el mismo que su anwer 'IFactory interfaz pública { IEnumerable GetAll(); Escriba GetOne (int Id); } ' – Deeptechtons

+2

@Deeptechtons - Casi. 'Type' es un nombre de clase .NET real, por lo que podría parecer ambiguo. Pero el nombre del parámetro de tipo genérico puede ser cualquier cosa. – Oded

10

declarar el tipo en la interfaz:

public interface IFactory<T> 
+0

+1 a pesar de que la suya es igual que Oded de, me encantó su forma de explicar con referencia. – Deeptechtons

2

El compilador no puede inferir para qué es la T. También debe declararlo en el nivel de clase.

Probar:

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