调用Action方法的好方法

时间:2011-01-10 00:27:30

标签: c# lambda action func

如何调用项目以便TestAction写出“s.Hello”?现在我什么也没做,它跳过“action = s ..”一行。

或者是另一种方法吗?由于我不想返回任何代码,我使用Action而不是Func

我刚刚开始使用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!");
    }
}

1 个答案:

答案 0 :(得分:6)

让我们从堆栈跟踪的底部深入挖掘您的代码。

  1. TestAction(b => b.Hello = "Hello world!");
  2. 您正在提供一个将b.Hello指定为“Hello World”的lambda。

    1. action = s => Console.WriteLine(s.Hello);
    2. 您正在为同一个委托分配一个新的lambda。

      你实际上并没有对它们做任何事情 - 你只是在生成一个委托。要执行该委托,您需要一个类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));
          }
      }