2
どのように私はTestActionが "s.Hello"を書き出すようにアイテムを呼び出すのですか?今は何もしません、それは "action = s .."の行にジャンプします。アクションメソッドで呼び出すための良い方法
これを行う別の方法はありますか?私はコードを返す必要はないので、私はFuncの代わりにActionを使用します
私はちょうどActionで作業を始めました。
どのように私はTestActionが "s.Hello"を書き出すようにアイテムを呼び出すのですか?今は何もしません、それは "action = s .."の行にジャンプします。アクションメソッドで呼び出すための良い方法
これを行う別の方法はありますか?私はコードを返す必要はないので、私はFuncの代わりにActionを使用します
私はちょうどActionで作業を始めました。
スタックトレースの下からコードをドリルダウンしましょう。
TestAction(b => b.Hello = "Hello world!");
あなたは、 "Hello World" のようb.Hello
割り当てラムダを供給しています。
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));
}
}
これは表現ツリーではありません。これは 'Expression>'です。それ以外は、良い答えです。 –
ラムダ自体は1つですが。しかし、私はそれについて間違っている可能性があります...私はExpression Treesで最近行ってきたことから、少なくとも.Compile()を使ってデリゲートを作成しました。 – Femaref
このコードはツリーを生成してコンパイルしません。コンパイルはコンパイル時に実行されます(私はそれが奇妙なことを知っています)。System.Linq.Expressions名前空間のクラスはこれによって使用されませんコード。 –