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

时间:2011-01-16 10:52:40

标签: c# .net reflection anonymous-methods

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

此代码将返回一个如此模糊的字符串:<Main>b__0

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

3 个答案:

答案 0 :(得分:6)

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

public static void Main()
{
    Action<string> 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);
}

答案 1 :(得分:6)

你可以在外面捕获它:

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

除此之外;号

答案 2 :(得分:3)

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

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