【发布时间】:2012-03-16 18:06:09
【问题描述】:
当您在运行时构建表达式树时,没有代码 发出。这是一种在运行时表示 .NET 代码的方式...
好的...
现在假设我有这个代码:
ParameterExpression p = Expression.Parameter (typeof (string), "s");
MemberExpression stringLength = Expression.Property (p, "Length");
ConstantExpression five = Expression.Constant (5);
BinaryExpression comparison = Expression.LessThan (stringLength, five);
Expression<Func<string, bool>> lambda= Expression.Lambda<Func<string, bool>> (comparison, p);
Func<string, bool> runnable = lambda.Compile();
此代码不会在 IL 中?当然会的! (也许最后一行在编译之前不会发出代码......但我认为第一行会发出代码!)
那么我在这里保存什么?
好的,所以前 5 行确实发出了代码,而最后一行没有……大不了。
我错过了什么?可以让我看看全图吗?
【问题讨论】:
-
当你调用compile时,表达式树被转换为IL(使用
DynamicMethod)。 -
@leppie 和前 5 行不会在 IL 中?
-
嗯,这是最初编译的普通代码。表达式没有 IL 的概念,它是一种抽象,可以发送到 IL,但没有要求这样做(例如,您可以发送自己的 x86 ASM 或 GPU 代码等)。
-
你从哪里得到这个声明的?
-
我认为他的意思是“结果委托的 IL 代码”而不是“创建表达式的 IL 代码”。
标签: c# .net-4.0 expression-trees