编译器/运行时可以重新排序还是内联表达式树?
如果我得到以下代码:
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将永远不会被执行,所以我只想确保方法调用不会远离表达式树进行优化。
答案 0 :(得分:2)
编译器永远不会优化它。
答案 1 :(得分:0)
编译器无法对其进行优化,因为它不知道如何执行它。通常(通常是?)表达式实际上不是由CLR执行,而是由SQL引擎之类的其他东西执行。由于其他执行引擎的语义可能与C#的语义不完全匹配,因此表达式的写入与写入数据完全相同非常重要。