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

时间:2015-02-13 12:45:30

标签: c#

请考虑以下事项:

public void Step(Action code){}

为了重用这个,我通常会像这样传递一个lambda表达式:

tr.Step(() => StaticType.SomeMethod(someParameter);

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

tr.Step(SomeNonStaticType.SomeMethod);

SomeMethod在哪里:

public override void SomeMethod(){}

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

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

1 个答案:

答案 0 :(得分:5)

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

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

您不能使用具有参数或返回类型为Action的方法,因为签名不匹配。为此,您需要执行类似() => StaticType.SomeMethod(someParameter)所做的事情。