gpt4 book ai didi

c# - 无法使用表达式初始化 LambdaExpression

转载 作者:行者123 更新时间:2023-11-30 19:47:17 26 4
gpt4 key购买 nike

类似于 one by John K 的问题,但更具体且已接受的答案不符合我的需要。

这编译得很好:

Expression<Func<object, object>> specificExpression = (object o) => new object();
Expression generalExpression = specificExpression;

而这个不是:

Expression generalExpression = (object o) => new object();

报编译错误:

Cannot convert lambda expression to type 'System.Linq.Expressions.Expression' because it is not a delegate type

Expression<Func<T1,T2>>源自 Expression .

现在我有了一个框架,它的方法可以接受各种表达式,即类型 Expression .被迫将 lambdas 显式转换为相应的 Expression<Func<T1,T2>>在每个方法调用上都令人沮丧。

这种基本的 OOP 行为在这种情况下被破坏的任何充分理由?

最佳答案

转换不起作用,因为编译器无法推断您要创建的特定表达式类型。如果你这样做会怎样?

Expression generalExpression = (object o) => "foo";

这应该是 Expression<Func<object, string>> ?怎么样Expression<Func<object, object>>Expression<Func<object, IComparable>> ?这些类型都是表达式树的有效最终类型,并且编译器不会假装知道您正在尝试做什么。

您需要通过特定类型进行强制转换以告知编译器您要生成哪种类型的表达式:

Expression generalExpression = (Expression<Func<object, object>>)
(object o) => new object();

如果您尝试这样做,您会看到类似的编译器错误:

Delegate generalDelegate = delegate() { };

那是Action吗? , 或 ThreadStart ,或其他某种无参数返回无效的委托(delegate)?

关于c# - 无法使用表达式初始化 LambdaExpression,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7017446/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com