Используя Объект Methodinfo.GetCurrentMethod () в анонимных методах

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

этот код вернет неясную строку, например:<Main>b__0.

есть ли способ игнорировать анонимные методы и получить более читаемое имя метода?

3 ответов


вы можете захватить его снаружи:

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

кроме этого; нет.


нет, нет. Вот почему это анонимный метод. Имя автоматически генерируется компилятором и гарантированно является уникальным. Если вы хотите получить имя вызывающего метода, вы можете передать его как аргумент:

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);
}

Если вы ищете получение имени функции, в которой находится анонимный метод, вы можете путешествовать по стеку и получить имя вызывающего метода. Обратите внимание, что это будет работать только до тех пор, пока ваше желаемое имя метода является одним шагом вверх в иерархии. Возможно, есть способ путешествовать, пока вы не достигнете не-анонимного метода.

для получения дополнительной информации см.: http://www.csharp-examples.net/reflection-calling-method-name/