转换函数到 Expression>
在 C# 中,将 lambda 表达式转换为 Expression>通过方法调用很简单。然而,相反的过程,将 Func到表达式> 中,提出了挑战。
尝试分配 Func 时直接到表达式>,编译器会由于不兼容的数据结构而引发错误。该错误源于以下事实:Func代表泛型委托,而不是表达式。
为什么直接转换失败
虽然编译器接受 lambda 表达式作为数据,但需要注意的是,此转换是在汇编。 lambda 表达式被分解为 IL 代码并构建表达式树。这个过程是不可逆的,编译后就无法恢复原来的 lambda 表达式。
对代码解释的影响
无法转换 Func;到表达式>强调了解释语言和编译语言之间的根本区别。在像 Lisp 这样的解释语言中,代码和数据在运行时是可以互换的。然而,在 C# 等编译语言中,编译器为了提高效率而牺牲了将代码视为数据的能力。
C# 提供了通过 Expression> 将 lambda 视为数据的错觉。构造,但这种操作只能在编译时进行。从 Func 直接转换到表达式>在运行时仍然是一个复杂且目前尚未解决的问题。
以上是如何在 C# 中将函数转换为表达式?的详细内容。更多信息请关注PHP中文网其他相关文章!