Используя Объект 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/