如何调用项目以便 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!");
}
}
最佳答案
让我们从堆栈跟踪的底部深入了解您的代码。
TestAction(b => b.Hello = "Hello world!");
您正在提供一个将 b.Hello
指定为“Hello World”的 lambda。
action = s => Console.WriteLine(s.Hello);
您正在为同一个委托(delegate)分配一个新的 lambda。
您实际上并没有对它们做任何事情 - 您只是生成一个委托(delegate)。要执行该委托(delegate),您需要一个 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));
}
}
关于c# - 在 Action 方法中调用的好方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4642781/