2012-05-07 11 views
4

複数の代入を行う動的ラムダ式(テキストから解析)を作成しようとしています。個々の課題を作成するのはかなり簡単でしたが、私はそれらをどのように組み合わせるかについて固執しています。 (Expression.Lambdaのみ入力として一つの発現がかかるので)1つのラムダ式での複数の代入操作

Action<Entity> action = (entity) => 
{ 
    entity.Property1 = "1"; 
    entity.Property2 = "2"; 
}; 

が一つに複数のExpression.Assign式を結合する方法はあります:だから私が達成しようとしていることと同じですか?

- 編集: 私が書いたコードは擬似コードなので、タイプミス(修正済み)は何も変わりません。

Expression parameter = Expression.Parameter(typeof(Entity), "param"); 
Expression firstProperty = Expression.Property(parameter, "Property1"); 
Expression first = Expression.Assign(firstProperty, "1"); 
Expression secondProperty = Expression.Property(parameter, "Property2"); 
Expression second = Expression.Assign(secondProperty, "2"); 
Expression final = [INSERT MAGIC HERE] 
Action<Entity> action = Expression.Lambda<Action<Entity>>(final, entity).Complie(); 

、それだけでデモの目的のために、プロパティ名は、実際にテキスト入力から来て、assigment式の数が2に限定されるものではないことに注意してください:私が今持っているコードのようなものです。私の質問は、私がassigmentの表現を組み合わせることができる表現があるか、それぞれのラムダを作成しなければならないということですか?

+3

あなたは、第二の割り当ての後にセミコロンが欠落していませんか?とにかく私が知る限り、表現の数には限界がありません。 [MSDN](http://msdn.microsoft.com/en-us/library/bb397687.aspx) –

+0

コンパイルエラーは何ですか? –

+0

説明が更新されました。 Expression.Andを試してみると、コンパイラエラーは発生しません。例えば、正しいですが、Property1 = "1" && Property2 = "2"は無効です。 –

答えて

3

はこの魔法を試してみてください:

Expression.Block(first, second); 
+0

それは私が探していたものです、魅力のように動作します、ありがとう! –

+0

残念なことに.net 3.5には存在しません:/ – Mic

+0

@Mic .NET 3.5の式ツリーは、ステートメントではなく実際の式のみをサポートしています。 LINQを有効にするために必要なのはこれだけです。 –

関連する問題