在匿名方法中使用MethodInfo.GetCurrentMethod()

public static void Main(string[] args) { Action a = () => Console.WriteLine(MethodInfo.GetCurrentMethod().Name); a(); } 

此代码将返回一个模糊的字符串,如下所示: b__0

有没有办法忽略匿名方法并获得更可读的方法名称?

你可以在外面捕获它:

 var name = MethodInfo.GetCurrentMethod().Name + ":subname"; Action a = () => Console.WriteLine(name); 

除此之外; 没有。

不,没有。 这就是为什么它是一种匿名方法。 该名称由编译器自动生成,并保证是唯一的。 如果要获取调用方法名称,可以将其作为参数传递:

 public static void Main() { Action a = name => Console.WriteLine(name); a(MethodInfo.GetCurrentMethod().Name); } 

或者如果你真的想要一个有意义的名字,你需要提供它:

 public static void Main() { Action a = MeaningfullyNamedMethod; a(); } static void MeaningfullyNamedMethod() { Console.WriteLine(MethodInfo.GetCurrentMethod().Name); } 

如果您正在寻找获取匿名方法所在的函数的名称,您可以遍历堆栈并获取调用方法的名称。 请注意,只有您所需的方法名称在层次结构中是一步之后,这才会起作用。 也许有一种方法可以直到达到非匿名方法。

有关详细信息,请参阅: http : //www.csharp-examples.net/reflection-calling-method-name/