Получение MethodBase.GetCurrentMethod(), но без параметров
У меня есть функция
public void AddPerson(string name)
{
Trace.WriteLine(MethodBase.GetCurrentMethod());
}
Ожидаемый результат
void AddPerson(string name)
Но я хотел, чтобы у выведенного имени метода не было параметров.
void AddPerson()
2 ответа
Решение
Чтобы сделать это надежно, возникнет проблема, вам придется создать его, то есть тип возвращаемого значения, имя, универсальные типы, модификаторы доступа и т. Д.
Например
static void Main(string[] args)
{
var methodBase = MethodBase.GetCurrentMethod() as MethodInfo;
Console.WriteLine($"{methodBase.ReturnType.Name} {methodBase.Name}()");
}
Выход
Void Main()
Подводные камни, вы преследуете движущуюся цель
public static (string, string) Blah(int index)
{
var methodBase = MethodBase.GetCurrentMethod() as MethodInfo;
Console.WriteLine(MethodBase.GetCurrentMethod());
Console.WriteLine($"{methodBase.ReturnType.Name} {methodBase.Name}()");
return ("sdf","dfg");
}
Выход
System.ValueTuple`2[System.String,System.String] Blah(Int32)
ValueTuple`2 Blah()
Другой вариант - просто переделать параметры с чем-то вроде этого (?<=\().*(?<!\))
GetCurrentMethod
метод возвращает MethodBase
объект, а не строка. Поэтому, если вы хотите другую строку, чем то, что .ToString()
для этого возвращается, вы можете собрать воедино строку из MethodBase
свойства или просто вернуть Name
собственность, как:
Trace.WriteLine(MethodBase.GetCurrentMethod().Name);