为什么不能推断该泛型类的类型参数?

时间:2018-12-27 15:16:44

标签: c# generics

我有一个通用类...

public class SimilarityChooser<T, To>

...具有这样的构造函数...

public SimilarityChooser(
  IEnumerable<T> entities,
  Func<T, string> getWord,
  Func<T, To> toOverview
)

...然后我像这样创建它的新实例...

var chooser = new SimilarityChooser<Customer, CustomerNameOverview>(
  CustomerRepository.GetAll(),
  c => c.Name,
  c => c.ToCustomerNameOverview()
);

......其中参数将类型参数T固定为Customer,将To固定为CustomerNameOverview

我希望能够在没有类型参数的情况下编写代码...

var chooser = new SimilarityChooser(
  CustomerRepository.GetAll(),
  c => c.Name,
  c => c.ToCustomerNameOverview()
);

...但是Visual Studio给出了编译器错误使用通用类型'SimilarityChooser'需要2个类型参数

既然参数指定了泛型类型,为什么不能推断出泛型呢?

编辑因此,阅读了链接@ Shelby115的答案之后,我可以看到为什么这不适用于构造函数,但似乎应该适用于工厂方法。我将上述ctor设为私有,并添加了以下内容...

public static SimilarityChooser<T, To> CreateMap(
  IEnumerable<T> entities,
  Func<T, string> getWord,
  Func<T, To> toOverview
) =>
  new SimilarityChooser<T, To>(entities, getWord, toOverview);

...但是我仍然需要通用参数。为什么会这样?

0 个答案:

没有答案