2011-01-10 9 views
2

どのように私はTestActionが "s.Hello"を書き出すようにアイテムを呼び出すのですか?今は何もしません、それは "action = s .."の行にジャンプします。アクションメソッドで呼び出すための良い方法

これを行う別の方法はありますか?私はコードを返す必要はないので、私はFuncの代わりにActionを使用します

私はちょうどActionで作業を始めました。

答えて

6

スタックトレースの下からコードをドリルダウンしましょう。

  1. TestAction(b => b.Hello = "Hello world!");

あなたは、 "Hello World" のようb.Hello割り当てラムダを供給しています。

  1. action = s => Console.WriteLine(s.Hello);

あなたは同じデリゲートに新しいラムダを割り当てています。

実際には何もしていません。デリゲートを生成するだけです。そのデリゲートを実行するには、クラスItemsの引数が必要です。あなたが本当に欲しいのはです。このような議論を伴う行動はです。

public class TestClass 
{ 
    public void TestAction(Action<Items> action) 
    { 
     Items i = new Item() { Hello = "Hello World"); 
     action(i); 
    } 

    public TestClass() 
    { 
     TestAction(b => Console.WriteLine(b.Hello)); 
    } 
} 
+0

これは表現ツリーではありません。これは 'Expression >'です。それ以外は、良い答えです。 –

+0

ラムダ自体は1つですが。しかし、私はそれについて間違っている可能性があります...私はExpression Treesで最近行ってきたことから、少なくとも.Compile()を使ってデリゲートを作成しました。 – Femaref

+0

このコードはツリーを生成してコンパイルしません。コンパイルはコンパイル時に実行されます(私はそれが奇妙なことを知っています)。System.Linq.Expressions名前空間のクラスはこれによって使用されませんコード。 –

関連する問題