Мое настоящее понимание заключается в том, что код "жесткого кодирования" выглядит следующим образом:
public int Add(int x, int y) {return x + y;}
всегда будет работать лучше, чем код дерева выражений, например:
Expression<Func<int, int, int>> add = (x, y) => x + y;
var result = add.Compile()(2, 3);
var x = Expression.Parameter(typeof(int));
var y = Expression.Parameter(typeof(int));
return (Expression.Lambda(Expression.Add(x, y), x, y).
Compile() as Func<int, int, int>)(2, 3);
поскольку компилятор имеет больше информации и может потратить больше усилий на оптимизацию кода, если вы его компилируете во время компиляции. Это вообще правда?