【发布时间】:2018-09-03 16:28:52
【问题描述】:
我不确定,为什么打电话给Map2 给我
方法'Program.Map2(object, Func)' 不能从用法中推断出来。尝试指定 显式输入参数。
这里是代码...
void Test()
{
var test1 = Map1(1, MapIntToString);
var test2 = Map2(1, MapIntToString);
}
To Map1<From, To>(From value, Func<From, To> mapFunc) => mapFunc(value);
To Map2<From, To>(object value, Func<From, To> mapFunc) => mapFunc((From)value);
string MapIntToString(int value) => Convert.ToString(value);
这是一个非常简单的例子。我需要将一些 DTO 列表转换为模型(并返回),但它应该是相同的情况......
【问题讨论】:
-
在
Map1中,您很容易让它推断出From是int,因为这是第一个参数的类型。在Map2,它不知道从哪里开始From -
另外,请记住,在
Map1和Map2的调用站点,编译器没有关于如何实现这些方法的信息——它只能工作从方法签名 - 即使它可以进行更深入的检查,演员的方向也是错误的。
标签: c# generics type-inference