给出以下通用接口和实现类:
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> {
}
如何在不指定U的情况下调用Find方法?
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>();
换句话说,可以做些什么来获得类型推断?
谢谢!
答案 0 :(得分:15)
我怎么能调用Find方法 没有指定U?
不幸的是,C#的泛型方法重载决策根据返回值不匹配。
请参阅Eric Lippert的博客文章: C# 3.0 Return Type Inference Does Not Work On Method Groups
但是,写一个简单的方法是使用var
关键字。
var employees = repository.Find<Employee>();
答案 1 :(得分:6)
怎么写
var people = repository.Find<Employee>();
它以相同的方式保存相同数量的输入。