我对这个错误很困惑:
Cannot implicitly convert type 'System.Func [c:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\mscorlib.dll]' to 'System.Func [c:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\mscorlib.dll]' path\to\my\project\Operators.cs
类型完全相同,为什么还要尝试进行强制转换?这是代码:
public static class Operators
{
private static Func _add = null;
public static T Add(T a, T b)
{
if (_add == null) {
var param1Expr = Expression.Parameter(typeof (T));
var param2Expr = Expression.Parameter(typeof (T));
var addExpr = Expression.Add(param1Expr, param2Expr);
var expr = Expression.Lambda<>>(addExpr, param1Expr, param2Expr);
_add = expr.Compile(); // <--- error occurs here
}
return _add.Invoke(a, b);
}
}
问题是您的方法 是通用的,引入了一个新的类型参数T
。所以方法外的 T
和方法内的 T
是不一样的。
只需将您的方法更改为不通用即可:
public static T Add(T a, T b)
...应该没问题。
为了更清楚,您的代码目前等同于:
public static class Operators
{
private static Func _add = null;
public static TM Add(TM a, TM b)
{
if (_add == null) {
var param1Expr = Expression.Parameter(typeof(TM));
var param2Expr = Expression.Parameter(typeof(TM));
var addExpr = Expression.Add(param1Expr, param2Expr);
var expr = Expression.Lambda<>>
(addExpr, param1Expr, param2Expr);
_add = expr.Compile();
}
return _add.Invoke(a, b);
}
}
请注意我是如何将 类 引入的 T
重命名为 TC
,以及引入的 T
vượt qua方法đếnTM
。错误消息现在看起来更合理了:
Test.cs(19,20): error CS0029: Cannot implicitly convert type
'System.Func' to 'System.Func'
Tôi là một lập trình viên xuất sắc, rất giỏi!