我正在学习C#中的表达式树。局部变量和表达式树
我现在坚持了一会儿:
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 =>(值为(Predicate.Program + <> c__DisplayClass3).filterString)}
感谢您对此主题的阐述。
谢谢。查看生成的MSIL代码的提示非常有用。 – yonexbat
'var hoistedConstant = Expression.Property(Expression.Constant(new {Value = filterString}),“Value”);'应该这样做 – Appetere
@Appetere Expression.Constant(filterString)''怎么样?诚然,它不会反映变量的变化,但您的建议也不会。 –