Можно ли оптимизировать лямбда-выражения компилятором? - PullRequest
1 голос
/ 23 ноября 2011

Может ли компилятор / среда выполнения переупорядочивать или встроенные деревья выражений?

Если я получил следующий код:

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").Лямбда никогда не будет выполнена, поэтому я просто хочу убедиться, что вызов метода не оптимизирован вне дерева выражений.

Ответы [ 2 ]

2 голосов
/ 23 ноября 2011

Компилятор никогда не оптимизирует это.

0 голосов
/ 24 ноября 2011

Компилятор не может оптимизировать его, потому что он не знает, как он будет выполняться.Часто (обычно?) Бывает, что выражения на самом деле выполняются не CLR, а чем-то другим, например, механизмом SQL.Поскольку семантика других механизмов выполнения может не совсем соответствовать семантике C #, важно, чтобы выражения транслировались точно так же, как записываются в данные.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...