调用Action方法的好方法

Enu*_*mto 2 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!");
    }
}
Run Code Online (Sandbox Code Playgroud)

Fem*_*ref 6

让我们从堆栈跟踪的底部深入研究您的代码.

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

您正在提供一个指定b.Hello为"Hello World" 的lambda .

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

您正在为同一个委托分配一个新的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));
    }
}
Run Code Online (Sandbox Code Playgroud)