2

TestActionが「s.Hello」を書き出すようにアイテムを呼び出すにはどうすればよいですか?今は何もしていません。「action=s..」の行を飛び越えます。

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

Actionを使い始めたばかりです。

public class Items
{
    public string Hello { get; set; }
}

public class TestClass
{
    public void TestAction(Action<Items> action)
    {
        action = s => Console.WriteLine(s.Hello);
    }

    public TestClass()
    {
        TestAction(b => b.Hello = "Hello world!");
    }
}
4

1 に答える 1

6

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

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

「HelloWorld」として割り当てるラムダを提供してい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));
    }
}
于 2011-01-10T00:32:55.520 に答える