我有一个通用类...
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);
...但是我仍然需要通用参数。为什么会这样?