Впервые я изучаю деревья выражений. У меня есть несколько основных сомнений.Деревья выражений в C#
По существу, выражение принимает только лямбда-выражение. Ans, тогда мы можем скомпилировать() выражение лямбда для кода MSIL, который, в свою очередь, возвращает общий делегат. Мы можем вызвать возвращаемого делегата, как есть. Правильно ли я понимаю?
Если это вот то, что я пытаюсь достичь: ((10*5)+(9/4))
BinaryExpression b1 = Expression.MakeBinary(ExpressionType.Multiply, Expression.Constant(10), Expression.Constant(5));//(10*5)
BinaryExpression b2 = Expression.MakeBinary(ExpressionType.Divide, Expression.Constant(9), Expression.Constant(4));//(9/4)
BinaryExpression b4 = Expression.MakeBinary(ExpressionType.Add, b1, b2);//((10*5)+(9/4))
Таким образом, на данный момент мы сделали lambda expression body
. Теперь, чтобы превратить его в full lambda expression
нам нужно вызвать
Console.WriteLine(Expression.Lambda<Func<int, int>>(b4).Compile());
Я не получаю эту часть. И это тоже не работает.
Почему это Func<int,int>
?
Похоже, что внутренние выражения будут принимать только int как param, и все выражение вернет int?
Очевидно, что это не работает. Как выглядит сгенерированная лямбда?
Я получаю картину всего изображения? Как это сделать?
* И это не работает также *, что он делает? Это дает вам ошибку? Какая ошибка? –