JF *_*ier 16 c# lambda implicit-conversion
我想定义从(特定)lambda表达式到用户定义类型的隐式转换.我尝试了以下方法:
public static implicit operator DualElement<T>(Func<OPTatom, OPTatom, T> atomMap)
{
return new DualElement<T>(e => atomMap(e[0],e[1]));
}
Run Code Online (Sandbox Code Playgroud)
然后我试了一下
DualElement<double> dubidu = (i, j) => cost[i, j];
Run Code Online (Sandbox Code Playgroud)
它给出了"无法转换lambda表达式...因为它不是委托类型"
相反,有效的是:
DualElement<double> dideldu = (Func<OPTatom, OPTatom, double>)((i, j) => cost[i, j]);
Run Code Online (Sandbox Code Playgroud)
我猜,lambda表达式没有'Func'类型,所以我必须在隐式转换中加入不同的东西.
有人可以给我一个暗示吗?
你的解决方法非常好.
Lambdas本身没有类型,因此它们应该被转换为适当的类型.
请参阅MSDN:
请注意,lambda表达式本身没有类型,因为公共类型系统没有"lambda表达式"的内在概念.然而,有时非常方便地谈论lambda表达式的"类型".在这些情况下,类型引用lambda表达式转换为的委托类型或表达式类型.
这就是以下示例无法编译的原因:
var func = (i, j) => i + j;
Run Code Online (Sandbox Code Playgroud)