Dies ist eine dumme Frage, aber ist es möglich, den Namen der Methode, die gerade ausgeführt wird, aus dieser Methode heraus abzurufen?
Public Sub SomeMethod()
Dim methodName as String = System.Reflection.[function to get the current method name here?]
End Sub
Vielen Dank
.net
vb.net
reflection
camainc
quelle
quelle
Antworten:
System.Reflection.MethodInfo.GetCurrentMethod();
quelle
Die anderen Methoden entsprechen in etwa dem, was gefragt wurde, geben jedoch den Zeichenfolgenwert nicht zurück . Aber das tut:
Dim methodName$ = System.Reflection.MethodBase.GetCurrentMethod().Name
quelle
Um sicherzustellen, dass eine der Antworten auf diese Frage
System.Reflection.MethodBase.GetCurrentMethod().Name
zur Laufzeit tatsächlich funktioniert ( ), müssen Sie ein Attribut hinzufügen. Es gibt keine Compiler- / Laufzeitflags, von denen ich weiß, dass sie diese Methode unterbrechen:Die Funktion, deren Namen Sie abrufen möchten, muss markiert sein
[<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)]
Heutzutage gibt es auch den
nameof()
Operator in VB, C # ( und vielleicht bald F # ), der für Ihren Fall wärenameof(SomeMethod)
(ich glaube, die Syntax wäre hier für VB und C # dieselbe).quelle
Ein anderer Ansatz wäre die Verwendung des Caller-Mitgliedsnamenattributs aus dem System. Runtime. Compiler Services-Namespace, um einen optionalen Parameter zu füllen. Zum Beispiel ...
Private Function GetMethodName(<System.Runtime.CompilerServices.CallerMemberName> Optional memberName As String = Nothing) As String Return memberName End Function
Die Funktion wird wie erwartet aufgerufen ...
Public Sub DoSomeWork() Dim methodName As String = GetMethodName() Console.WriteLine($"Entered {methodName}") ' Do some work End Sub
Anstatt nur den Methodennamen abzurufen, kann die Funktion auch den abgerufenen Methodennamen verwenden, um den Code weiter zu vereinfachen. Zum Beispiel...
Private Sub TraceEnter( <System.Runtime.CompilerServices.CallerMemberName> Optional memberName As String = Nothing) Console.WriteLine($"Entered {memberName}") End Sub
... was so verwendet werden könnte ...
Public Sub DoSomeWork() TraceEnter() ' Do some work End Sub
Andere Attribute im CompilerServices-Namespace können auf ähnliche Weise verwendet werden, um den vollständigen Pfad (zur Kompilierungszeit) der Quelldatei und / oder die Zeilennummer des Aufrufs abzurufen. Beispielcode finden Sie in der CallerMemberNameAttribute-Dokumentation.
quelle
Dim methodName As String = System.Reflection.MethodBase.GetCurrentMethod().Name
quelle