Когда вы строите дерево выражений во время выполнения, отсутствует код . Это способ представления .NET кода во время выполнения ...Дерево выражений испускает код времени выполнения?
Ok ...
Теперь давайте говорить у меня есть этот код:
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 строк испустили код, а последний не сделал ... большое дело.
Что мне не хватает? Не могли бы вы позволить мне увидеть всю картину?
Когда вы вызываете компиляцию, дерево выражений преобразуется в IL (используя 'DynamicMethod'). – leppie
@leppie и первые 5 строк не будут в IL? –
Ну, это обычный код, который сначала компилируется. Выражение не имеет понятия IL, это абстракция, которая может быть испущена IL, но нет необходимости делать это (вы можете, например, исправить свой собственный x86 ASM или код графического процессора и т. Д.). – leppie