给定以下通用接口和实现类:
public interface IRepository{ // U has to be of type T of a subtype of T IQueryable Find() where U : T; } public class PersonRepository : IRepository { }
如何在不指定U的情况下调用Find方法?
var repository = new EmployeeRepository(); // Can't be done IQueryablepeople = repository.Find(); // Has to be, but isn't Employee a given in this context? IQueryable people = repository.Find (); // Here I'm being specific IQueryable managers = repository.Find ();
换句话说,可以做些什么来获得类型推断?
谢谢!
如何在不指定U的情况下调用Find方法?
不幸的是,C#的泛型方法重载决策基于返回值不匹配.
请参阅Eric Lippert关于它的博文: C#3.0返回类型推断在方法组上不起作用
但是写一个简单的方法就是使用var
关键字.
var employees = repository.Find();
写作怎么样?
var people = repository.Find();
它以不同的方式节省了相同的打字量.