Abrufen des aktuellen Methodennamens in C#

Saad Aslam 12 Oktober 2023
  1. Erhalten Sie den aktuellen Methodennamen mit MethodBase.GetCurrentMethod() in C#
  2. Erhalten Sie den aktuellen Methodennamen mit Reflection in C#
  3. Erhalten Sie den aktuellen Methodennamen mit der Klasse StackTrace in C#
  4. Erhalten Sie den aktuellen Methodennamen mit dem Operator nameof in C#
Abrufen des aktuellen Methodennamens in C#

In diesem Artikel erfahren Sie, wie Sie C# verwenden, um den Namen der aktuell ausgeführten Methode abzurufen. In C# gibt es mehrere Möglichkeiten, den Namen der gerade ausgeführten Methode abzurufen.

Die folgenden Prozeduren, die ähnlich funktionieren, werden unten skizziert, diskutiert und ausgeführt.

Erhalten Sie den aktuellen Methodennamen mit MethodBase.GetCurrentMethod() in C#

Es ist notwendig, ein MethodBase-Objekt zu verwenden, um die aktuelle Methode darzustellen.

Es ist möglich, GetCurrentMethod() innerhalb einer laufenden Methode zu verwenden und Informationen über die aktuelle Methode zu erhalten. Sie können die Funktion MethodBase.GetCurrentMethod() verwenden, um ein MethodBase-Objekt zu erhalten, das die aktuell ausgeführte Methode widerspiegelt.

Importieren Sie zunächst die Bibliotheken, um Zugriff auf die Funktionen zu haben, die später im Code verwendet werden.

using System;
using System.Diagnostics;
using System.Reflection;

Initialisieren Sie dann innerhalb der Methode Main eine Variable vom Typ String, die die Funktion GetCurrentMethod() verwendet, um den Namen der aktuellen Methode zu überprüfen. Und dann wird der Funktionsname in der Konsole ausgegeben.

string getName = MethodBase.GetCurrentMethod().Name;
Console.WriteLine("Current method is " + getName);

Quellcode:

using System;
using System.Diagnostics;
using System.Reflection;

class CurrentMethodName {
  public static void Main() {
    string getName = MethodBase.GetCurrentMethod().Name;
    Console.WriteLine("Current method is " + getName);
  }
}

Ausgang:

Current method is Main

MethodInfo gegeben durch GetCurrentMethod wird von der generischen Typdefinition abgeleitet, wenn die aktuell laufende Methode auf einem generischen Typ definiert ist (MethodBase.ContainsGenericParameters gibt true zurück). Daher stellt es nicht den Parametertyp dar, der an die Methode übergeben wurde, als sie aufgerufen wurde.

GetCurrentMethod gibt die generische Methodenbeschreibung zurück, wenn die gerade laufende Methode generisch ist. MethodInfo wird von der Spezifikation des generischen Typs empfangen, wenn die generische Methode auf einem generischen Typ angegeben ist.

Erhalten Sie den aktuellen Methodennamen mit Reflection in C#

Reflexion könnte eine einfache Methode sein, um loszulegen. Der Namensraum Reflektion stellt die Klasse MethodBase bereit, die GetCurrentMethod verfügbar macht, um die Methodeninformationen zu erhalten.

System.Reflection.MethodBase.GetCurrentMethod().Name;

Hier ist der gesamte Quellcode der Reflection-Methode.

Quellcode:

using System;

class CurrentMethodName {
  private static void Main(string[] args) {
    var getName = System.Reflection.MethodBase.GetCurrentMethod().Name;
    Console.WriteLine("Current method is " + getName);
  }
}

Ausgang:

Current method is Main
Note
Dies würde für Nicht-Sync-Methoden funktionieren.

Erhalten Sie den aktuellen Methodennamen mit der Klasse StackTrace in C#

Eine andere Möglichkeit, den Namen der Methode zu erhalten, ist die Verwendung der Methode StackTrace und des Stapelrahmens, um die Methodeninformationen abzurufen. Es ist möglich, den Namen der Methode über die Eigenschaft GetMethod() des Frames zu erhalten, der von der Funktion StackTrace GetFrame() zurückgegeben wird.

Importieren Sie zunächst die Bibliotheken, um auf die Klasse StackTrace im Code zuzugreifen.

using System;
using System.Diagnostics;

Legen Sie ein StackTrace-Objekt in einer Variablen namens stackTrace fest und verwenden Sie dieses Objekt dann in der Main()-Funktion. Erstellen Sie eine Variable getFrame, die den Frame von der GetFrame-Funktion über StackTrace erhält.

Erstellen Sie eine Variable namens getName und weisen Sie ihr die Verantwortung zu, den Namen der aktiven Methode abzurufen, indem Sie das Name-Attribut der GetMethod-Klasse verwenden.

var stackTrace = new StackTrace();
var getFrame = stackTrace.GetFrame(0);
var getName = getFrame.GetMethod().Name;

Quellcode:

using System;
using System.Diagnostics;

class CurrentMethodName {
  private static void Main(string[] args) {
    var stackTrace = new StackTrace();
    var getFrame = stackTrace.GetFrame(0);
    var getName = getFrame.GetMethod().Name;
    Console.WriteLine("Current method is " + getName);
  }
}

Ausgang:

Current method is Main

Erhalten Sie den aktuellen Methodennamen mit dem Operator nameof in C#

Wenn das Schlüsselwort nameof in einem Ausdruck verwendet wird, wird die Zeichenfolgenkonstante auf den Namen einer Variablen, eines Typs oder eines Members gesetzt. Der Ausdruck nameof hat zur Laufzeit keine Auswirkung, da er nur zur Erstellungszeit ausgewertet wird.

Sie können den Code zum Prüfen von Argumenten pflegeleichter machen, indem Sie einen Ausdruck namens nameof verwenden.

Dieser Ansatz basiert auf dem integrierten Schlüsselwort, das Folgendes nicht verwendet.

  1. using-Anweisung, die Reflektion-Namespaces anfügt, ist es unnötig, using System.Diagnostics; anzuhängen; und mit System.Reflection;
  2. Zusätzliche Klassen, die bestehenden Code widerspiegeln.

Quellcode:

using System;

class CurrentMethodName {
  private static void Unique() {
    string name = nameof(Unique);

    Console.WriteLine("Current method is " + name);
  }

  public static void Main(string[] args) {
    Unique();
  }
}

Ausgang:

Current method is Unique
Note
Der Operator nameof ist in C# Version 6 und höher verfügbar.
Autor: Saad Aslam
Saad Aslam avatar Saad Aslam avatar

I'm a Flutter application developer with 1 year of professional experience in the field. I've created applications for both, android and iOS using AWS and Firebase, as the backend. I've written articles relating to the theoretical and problem-solving aspects of C, C++, and C#. I'm currently enrolled in an undergraduate program for Information Technology.

LinkedIn

Verwandter Artikel - Csharp Function