Heim > Backend-Entwicklung > C++ > Wie kann ich Variablennamen in C# dynamisch abrufen?

Wie kann ich Variablennamen in C# dynamisch abrufen?

Patricia Arquette
Freigeben: 2024-12-31 04:10:14
Original
135 Leute haben es durchsucht

How Can I Retrieve Variable Names Dynamically in C#?

Variablennamen dynamisch abrufen: Alternativen mit Reflection und C# 6.0 erkunden nameof

Den Namen einer Variablen abrufen, nachdem sie in Intermediate kompiliert wurde Sprache (IL) ist eine häufige Herausforderung beim Programmieren. In diesem Artikel befassen wir uns mit der Lösung dieses Problems mithilfe von Reflection, einer leistungsstarken Funktion in .NET, mit der wir Metadaten zu Typen und Mitgliedern zur Laufzeit überprüfen können.

Die Einschränkungen der Reflection

Zunächst könnten wir erwägen, Reflektion zu nutzen, um Variablennamen abzurufen. Es ist jedoch wichtig zu beachten, dass Variablen nach der Kompilierung ihre Namen in IL nicht behalten. Daher führt das alleinige Verlassen auf Reflexion nicht zum gewünschten Ergebnis.

Eingabe von Ausdrucksbäumen und Abschlüssen: Eine Problemumgehung

Trotz der Einschränkungen der Reflexion gibt es eine genialer Workaround. Durch die Verwendung von Ausdrucksbäumen können wir eine Variable zu einem Abschluss heraufstufen. Diese Technik erfasst im Wesentlichen den Kontext der Variablen zur Kompilierungszeit, sodass wir später mithilfe der Funktion „GetVariableName

Implementierung und Verwendung

Hier ist ein Beispiel, das diesen Ansatz demonstriert:

static string GetVariableName<T>(Expression<Func<T>> expr)
{
    var body = (MemberExpression)expr.Body;
    return body.Member.Name;
}

static void Main()
{
    var someVar = 3;
    Console.Write(GetVariableName(() => someVar));
}</p>
<p>Diese Methode funktioniert durch Extrahieren der MemberExpression-Instanz aus dem Körper des bereitgestellten Lambda-Ausdrucks. Die Member-Eigenschaft der MemberExpression enthält dann den Namen der Variablen.</p>
<p><strong>Nachteile und Leistungsüberlegungen</strong></p>
<p>Diese Problemumgehung umgeht zwar die Einschränkungen der Reflektion, bringt jedoch Leistungseinbußen mit sich. Die Erstellung mehrerer Objekte, übermäßige nicht-inlinierbare Methodenaufrufe und eine starke Verwendung von Reflektion können zu Latenz führen. Es wird daher empfohlen, diesen Ansatz in leistungskritischen Codepfaden zu vermeiden.</p>
<p><strong>C# 6.0-Name des Schlüsselworts: Eine einfachere Lösung</strong></p>
<p>Mit der Einführung von C# 6.0 , ergab sich eine weitaus einfachere Lösung: das Schlüsselwort nameof. Dieses Schlüsselwort bietet eine prägnante und bequeme Möglichkeit, zur Kompilierungszeit auf den Namen einer Variablen, Eigenschaft oder Methode zuzugreifen.</p>
<p>In unserem ursprünglichen Beispiel können wir den Variablennamen jetzt mühelos mit nameof abrufen, wie unten gezeigt: </p>
<pre class="brush:php;toolbar:false">static void Main()
{
    var someVar = 3;
    Console.Write(nameof(someVar));
}
Nach dem Login kopieren

Das Schlüsselwort „nameof“ bietet die gleiche Funktionalität wie die Methode „GetVariableName“, jedoch mit verbesserter Funktionalität Leistung.

Fazit

Das Abrufen von Variablennamen in .NET erfordert sorgfältige Überlegungen. Während Reflexions- und Ausdrucksbäume eine Problemumgehung für das Abrufen von Variablennamen zur Laufzeit darstellen, müssen ihre Auswirkungen auf die Leistung berücksichtigt werden. Im Gegensatz dazu beseitigt das Schlüsselwort „nameof“ von C# 6.0 diese Leistungsprobleme und dient als effizientere Lösung für diese Aufgabe.

Das obige ist der detaillierte Inhalt vonWie kann ich Variablennamen in C# dynamisch abrufen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage