C# 为什么在动作参数中有时需要传递lambda,而有时不需要?

C# 为什么在动作参数中有时需要传递lambda,而有时不需要?,c#,C#,考虑以下几点: public void Step(Action code){} 要重用此表达式,我通常会像这样传递lambda表达式: tr.Step(() => StaticType.SomeMethod(someParameter); 而在其他时候,我可以简单地传递一个void函数,而不使用lambda表达式: tr.Step(SomeNonStaticType.SomeMethod); 其中,方法是: public override void SomeMethod(){} 有

考虑以下几点:

public void Step(Action code){}
要重用此表达式,我通常会像这样传递lambda表达式:

tr.Step(() => StaticType.SomeMethod(someParameter);
而在其他时候,我可以简单地传递一个void函数,而不使用lambda表达式:

tr.Step(SomeNonStaticType.SomeMethod);
其中,方法是:

public override void SomeMethod(){}
有人能给我解释一下吗


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

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

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


不能将具有参数或返回类型的方法用作
操作
,因为签名不匹配。为此,您需要执行类似于您在那里使用StaticType所做的操作。SomeMethod(someParameter)

请参阅:
操作
是一个委托;类方法和lambda表达式都可以用作委托。好的,在本例中是参数,因为它们都是空的。