Вывод типа C # из параметра универсального типа метода, в котором метод не имеет аргументов
-
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>();
Не связан с StackOverflow