Как вернуть IEnumerable <T>из метода - PullRequest
6 голосов
/ 03 ноября 2011

Я разрабатываю интерфейс для примера проекта, я хотел, чтобы он был как можно более универсальным, поэтому я создал интерфейс, как показано ниже

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

но потом случилось так, что мне пришлось дублировать интерфейс, чтобы сделать ниже

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

если вы посмотрели на разницу выше, это просто типы, которые они возвращают, поэтому я создал что-то вроде ниже только для того, чтобы найти ошибку Cannot Resolve Symbol T Что я делаю не так

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

Ответы [ 3 ]

11 голосов
/ 03 ноября 2011

Вам необходимо использовать универсальный интерфейс / класс , а не просто универсальные методы :

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

Определение универсального типа винтерфейс / класс гарантирует, что тип известен во всем классе (везде, где используется спецификатор типа).

10 голосов
/ 03 ноября 2011

Объявите тип на интерфейсе:

public interface IFactory<T>
2 голосов
/ 03 ноября 2011

Компилятор не может определить, для чего предназначен T. Вы должны объявить это и на уровне класса.

Попытка:

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