sách gpt4 ăn đã đi

c# - 无法从 Func 转换为 Func

In lại Tác giả: Walker 123 更新时间:2023-11-30 18:56:56 27 4
mua khóa gpt4 giày nike

我对这个错误很困惑:

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);
}
}

câu trả lời hay nhất

问题是您的方法 是通用的,引入了一个新的类型参数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,以及引入的 Tvượt qua方法đếnTM。错误消息现在看起来更合理了:

Test.cs(19,20): error CS0029: Cannot implicitly convert type
'System.Func' to 'System.Func'

关于c# - 无法从 Func 转换为 Func,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15055900/

27 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress