如何调用项目以便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!");
}
}
答案 0 :(得分:6)
让我们从堆栈跟踪的底部深入挖掘您的代码。
TestAction(b => b.Hello = "Hello world!");
您正在提供一个将b.Hello
指定为“Hello World”的lambda。
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));
}
}