5 ответов:
другие методы близки к тому, что было предложено, но они не возвращают строка значение. Но это:
Dim methodName$ = System.Reflection.MethodBase.GetCurrentMethod().Name
чтобы гарантировать, что любой из ответов, представленных на этот вопрос, действительно работает (
System.Reflection.MethodBase.GetCurrentMethod().Name) во время выполнения необходимо добавить атрибут. Нет никаких флагов компилятора / времени выполнения, которые я знаю о том, что сломать этот метод:функция, которую вы пытаетесь получить имя должны быть отмечены
- F#
[<System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.NoInlining)>]VB:
<System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.NoInlining)>C#:
[System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.NoInlining)]кроме того, в настоящее время элемент
nameof()оператор в VB, C#(и, возможно, F# скоро) что для вашего случая было быnameof(SomeMethod)(Я считаю, что синтаксис будет одинаковым для VB и C# здесь)
другой подход будет использовать CallerMemberNameAttribute из системы.Во время выполнения.Пространство имен CompilerServices для заполнения необязательного параметра. Например...
Private Function GetMethodName(<System.Runtime.CompilerServices.CallerMemberName> Optional memberName As String = Nothing) As String Return memberName End Functionфункция будет вызвана, как и следовало ожидать...
Public Sub DoSomeWork() Dim methodName As String = GetMethodName() Console.WriteLine($"Entered {methodName}") ' Do some work End Subвместо того, чтобы "просто" получать имя метода, функция может также использовать имя метода, полученное для дальнейшего упрощения кода. Например...
Private Sub TraceEnter( <System.Runtime.CompilerServices.CallerMemberName> Optional memberName As String = Nothing) Console.WriteLine($"Entered {memberName}") End Sub... что может быть используется вот так ...
Public Sub DoSomeWork() TraceEnter() ' Do some work End Subдругие атрибуты в пространстве имен CompilerServices могут использоваться аналогичным образом для получения полного пути (во время компиляции) исходного файла и/или номера строки вызова. Увидеть CallerMemberNameAttribute документации для образца кода.
Comments