Получение MethodBase.GetCurrentMethod (), но без параметров - PullRequest
0 голосов
/ 25 октября 2018

У меня есть функция

public void AddPerson(string name)
{
    Trace.WriteLine(MethodBase.GetCurrentMethod());
}

Ожидаемый результат -

void AddPerson(string name)

Но я хотел, чтобы у выведенного имени метода не было параметров.

void AddPerson()

Ответы [ 2 ]

0 голосов
/ 25 октября 2018

Чтобы сделать это надежно, возникнет проблема, вам придется создать ее, то есть тип возврата, имя, универсальные типы, модификаторы доступа и т. Д.

Например,

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()

Другой вариант - просто переопределить параметры с чем-то вроде этого (?<=\().*(?<!\))

0 голосов
/ 25 октября 2018

Метод GetCurrentMethod возвращает объект MethodBase, а не строку.Поэтому, если вам нужна строка, отличная от той, которую возвращает .ToString(), вы можете собрать строку из свойств MethodBase или просто вернуть свойство Name, например:

Trace.WriteLine(MethodBase.GetCurrentMethod().Name);
...