2

我如何调用项目以便 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!");
    }
}
4

1 回答 1

6

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

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

您正在提供一个分配b.Hello为“Hello World”的 lambda。

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

您正在为同一个委托分配一个新的 lambda。

你实际上并没有对他们做任何事情——你只是在生成一个委托。要执行该委托,您需要一个 class 参数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 回答