私は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 =>( X == 値(Predicate.Program + <> c__DisplayClass3).filterString)}
このトピックについていくつかの話をしてくれてありがとう。
ありがとうございます。生成されたMSILコードを見るヒントは非常に役に立ちます。 – yonexbat
何か '' Expression.Constant(Expression.Constant)、 "Value"); 'それを行う必要があります – Appetere
@Appetere' Expression.Constant(filterString) 'はどうでしょうか?確かに、変数への変更は反映されませんが、どちらもあなたの提案ではありません。 –