为什么在动作参数中我有时需要传递lambda而不是其他时间?

JL.*_*JL. 2 c#

考虑以下:

public void Step(Action code){}
Run Code Online (Sandbox Code Playgroud)

为了重用它,我通常传递一个lambda表达式,如下所示:

tr.Step(() => StaticType.SomeMethod(someParameter);
Run Code Online (Sandbox Code Playgroud)

而在其他时候我可以简单地传递一个void函数而不使用lambda表达式:

tr.Step(SomeNonStaticType.SomeMethod);
Run Code Online (Sandbox Code Playgroud)

SomeMethod在哪里:

public override void SomeMethod(){}
Run Code Online (Sandbox Code Playgroud)

有人可以向我解释一下吗?

编辑:要清楚两者都有void返回类型.编辑2:如果我问这些问题我应该阅读哪本书(请在评论中).

JLR*_*she 5

Action 是具有0个参数且没有返回值的方法的委托.

您可以将符合这些条件的任何方法传递给您tr.Step.

您不能使用具有参数或具有返回类型的方法Action,因为签名不匹配.为此你需要做一些像你在那里做的事情() => StaticType.SomeMethod(someParameter).