【发布时间】:2021-04-19 15:46:04
【问题描述】:
我可以像这样打印一个 lambda 表达式
Expression<Func<double,double>> expr = x => x * x;
string s = expr.ToString(); // "x => (x * x)"
如果
Func<double, double> function = x => x * x;
那么如何生成Expression<Func<double,double>> 以产生相同的结果?表达式构造函数是内部的,Func 类型和它们的表达式之间没有隐式转换。
【问题讨论】:
-
你不能。当您执行
Expression<...> expr = x => ...时,C# 编译器会发出在运行时构造该表达式树的代码。当您执行Func<...> f = x => ...时,编译器会发出实际上执行您所要求的事情的代码,并丢弃创建表达式所需的所有信息。 -
我能问一下你为什么要这样做吗?是某种调试支持吗?
-
@Neil :我认为在对微积分模块。更容易区分 NUnit 测试用例(使用 TestCase 属性时,NUnit 只需 .ToString 测试用例名称中的 args)。
标签: c# lambda expression