Получить имя текущего выполняемого метода в ядре dotnet

Я хочу получить имя выполняемого в данный момент метода в основном приложении dotnet.

Есть много примеров того, как это сделать с помощью обычного C #, например

Однако apis для обоих методов, похоже, еще не присутствует в ядре (см. https://github.com/dotnet/corefx/issues/1420)

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


person Not loved    schedule 13.12.2016    source источник
comment
Почему бы просто не использовать nameof(YourCurrentMethod)?   -  person Scott Chamberlain    schedule 13.12.2016
comment
Кроме того, более актуальной проблемой GitHub будет github.com/dotnet/corefx/issues/12496   -  person Scott Chamberlain    schedule 13.12.2016
comment
nameof(YourCurrentMethod) не намного лучше, чем просто использовать строку, спасибо за ссылку на проблему, похоже, этот метод также появится в будущем выпуске. Может ответ просто невозможен атм   -  person Not loved    schedule 13.12.2016
comment
Нет, это намного лучше, чем использовать строку. Если вы переименуете функцию, nameof(YourCurrentMethod) тоже будет обновляться, если вы используете инструменты переименования (и ошибку компилятора, чтобы напомнить вам исправить ее, если вы этого не сделаете)   -  person Scott Chamberlain    schedule 13.12.2016


Ответы (3)


CallerMemberNameAttribute Позволяет получить имя метода или свойства вызывающего метода.

public void DoProcessing()
{
    TraceMessage("Something happened.");
}

public void TraceMessage(string message,
        [System.Runtime.CompilerServices.CallerMemberName] string memberName = "",
        [System.Runtime.CompilerServices.CallerFilePath] string sourceFilePath = "",
        [System.Runtime.CompilerServices.CallerLineNumber] int sourceLineNumber = 0)
{
    System.Diagnostics.Trace.WriteLine("message: " + message);
    System.Diagnostics.Trace.WriteLine("member name: " + memberName);
    System.Diagnostics.Trace.WriteLine("source file path: " + sourceFilePath);
    System.Diagnostics.Trace.WriteLine("source line number: " + sourceLineNumber);
}

// Sample Output:
//  message: Something happened.
//  member name: DoProcessing
//  source file path: c:\Users\username\Documents\Visual Studio 2012\Projects\CallerInfoCS\CallerInfoCS\Form1.cs
//  source line number: 31
person feiyun0112    schedule 13.12.2016

Самый простой способ - использовать:

System.Reflection.MethodBase.GetCurrentMethod (). Имя

person Akarsha    schedule 12.01.2018
comment
Раньше работал - но не работает в ядре asp.net :( - person Lance Larsen - Microsoft MVP; 11.09.2019
comment
Это не так, но это действительно так: System.Reflection.MethodBase.GetCurrentMethod (). DeclaringType.Name. Я должен отметить, что он не возвращает точное имя метода, но он довольно близок и для моих нужд достаточно уникален. Например, у меня есть метод GetMembersAsync (), который вернет значение ‹GETMEMBERSASYNC› D__18. - person CHarmon; 17.04.2020

В .Net Core 3.1 для получения текущего имени метода используйте:

MethodBase.GetCurrentMethod().Name
person Rohin Tak    schedule 27.08.2020