Я изучаю деревья выражений в С#.
Я застрял на некоторое время:
string filterString = "ruby";
Expression<Func<string, bool>> expression = x => x == filterString;
Как я могу построить это выражение с помощью кода? Нет примера, как захватить локальную переменную. Это легко:
Expression<Func<string, bool>> expression = x => x == "ruby";
Это будет:
ParameterExpression stringParam = Expression.Parameter(typeof(string), "x");
Expression constant = Expression.Constant("ruby");
BinaryExpression equals = Expression.Equal(stringParam, constant);
Expression<Func<string, bool>> lambda1 =
Expression.Lambda<Func<string, bool>>(
equals,
new ParameterExpression[] { stringParam });
Отладчик печатает следующее для (x = > x == filterString):
{x = > (x == значение (Predicate.Program + < > c__DisplayClass3).filterString)}
Спасибо, что пролил свет на эту тему.