C#类型推断泛型方法类型参数,其中方法没有参数

时间:2009-01-28 12:00:30

标签: c# generics type-inference

给出以下通用接口和实现类:

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>();

换句话说,可以做些什么来获得类型推断?

谢谢!

2 个答案:

答案 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>();

它以相同的方式保存相同数量的输入。