Action(arg)和Action.Invoke(arg)之间的区别

static void Main() { Action myAction = SomeMethod; myAction("Hello World"); myAction.Invoke("Hello World"); } static void SomeMethod(string someString) { Console.WriteLine(someString); } 

上面的输出是:

 Hello World Hello World 

现在我的问题是

  • 如果有的话,调用Action的两种方法有什么区别?

  • 这个比那个好吗?

  • 何时使用哪个?

谢谢

所有委托类型都有编译器生成的Invoke方法。
C#允许您将委托本身作为调用此方法的快捷方式。

他们都编译到同一个IL:

C#:

 Action x = Console.WriteLine; x("1"); x.Invoke("2"); 

IL:

 IL_0000: ldnull IL_0001: ldftn System.Console.WriteLine IL_0007: newobj System.Action..ctor IL_000C: stloc.0 IL_000D: ldloc.0 IL_000E: ldstr "1" IL_0013: callvirt System.Action.Invoke IL_0018: ldloc.0 IL_0019: ldstr "2" IL_001E: callvirt System.Action.Invoke 

ldnull用于打开委托中的target参数)