Вывод типа C # из параметра универсального типа метода, в котором метод не имеет аргументов

StackOverflow https://stackoverflow.com/questions/487373

  •  20-08-2019
  •  | 
  •  

Вопрос

Учитывая следующий общий интерфейс и реализующий класс:

public interface IRepository<T> {
    // U has to be of type T of a subtype of T
    IQueryable<U> Find<U>() where U : T;
}

public class PersonRepository : IRepository<Employee> {

}

Как я мог бы вызвать метод Find без указания U?

var repository = new EmployeeRepository();
// Can't be done
IQueryable<Employee> people = repository.Find();

// Has to be, but isn't Employee a given in this context?
IQueryable<Employee> people = repository.Find<Employee>();

// Here I'm being specific
IQueryable<Manager> managers = repository.Find<Manager>();

Другими словами, что можно сделать, чтобы получить вывод типа?

Спасибо!

Это было полезно?

Решение

Как насчет того, чтобы написать

var people = repository.Find<Employee>();

Это экономит тот же объем ввода, но другим способом.

Другие советы

Как я мог бы вызвать метод Find без указания U?

Ты не можешь.

К сожалению, разрешение перегрузки универсального метода C # не соответствует на основе возвращаемых значений.

Смотрите запись в блоге Эрика Липперта об этом: Вывод возвращаемого типа C # 3.0 Не работает Для групп методов

Но один из простых способов написать это - использовать var ключевое слово.

var employees = repository.Find<Employee>();
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top