lambda表达式可以由编译器优化吗?

时间:2011-11-23 17:54:51

标签: c# optimization lambda

编译器/运行时可以重新排序还是内联表达式树?

如果我得到以下代码:

public static int SomeSimpleMethod(int x) {
    return x;
}

void Main() {
    Expression<Func<bool>> expr = () => SomeSimpleMethod(2) == 3;
}

expr可以包含除(伪代码)之外的其他内容

Expression.Lambda
    Expression.Equals
         Expression.Call
             Expression.Constant
         Expression.Constant

修改

我只是在解析表达式树以找到一些项目,比如方法调用的名称(“SomeSimpleMethod”)。 lambda将永远不会被执行,所以我只想确保方法调用不会远离表达式树进行优化。

2 个答案:

答案 0 :(得分:2)

编译器永远不会优化它。

答案 1 :(得分:0)

编译器无法对其进行优化,因为它不知道如何执行它。通常(通常是?)表达式实际上不是由CLR执行,而是由SQL引擎之类的其他东西执行。由于其他执行引擎的语义可能与C#的语义不完全匹配,因此表达式的写入与写入数据完全相同非常重要。