This is kind of a silly question, but is it possible to get the name of the method that is currently being executed from within that method?
Public Sub SomeMethod()
Dim methodName as String = System.Reflection.[function to get the current method name here?]
End Sub
Thanks
The other methods are close to what was asked, but they don't return the string value. But this does:
System.Reflection.MethodInfo.GetCurrentMethod();
To guarantee that any of the answers presented to this question actually work (
System.Reflection.MethodBase.GetCurrentMethod().Name
) at runtime, you need to add an attribute. There are no compiler/runtime flags that I know of that break this method:the function you are trying to get the name of must be marked
[<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)]
Also, nowadays, there is the
nameof()
operator in VB, C#(and maybe F# soon) which for your case would benameof(SomeMethod)
(I believe the syntax would be the same for VB and C# here)Another approach would be to use CallerMemberNameAttribute from the System.Runtime.CompilerServices namespace to populate an optional parameter. For example ...
The function would be invoked as you would expect...
Rather than 'just' retrieving the method name, the function might also make use of the method name retrieved to further simplify code. For example...
... which might be used like this ...
Other attributes in the CompilerServices namespace may be used in similar fashion to retrieve the full path (at compile time) of the source file and/or the line number of the call. See the CallerMemberNameAttribute documentation for sample code.