Zum Beispiel,
static void Main()
{
var someVar = 3;
Console.Write(GetVariableName(someVar));
}
Die Ausgabe dieses Programms sollte sein:
someVar
Wie kann ich das mit Hilfe der Reflexion erreichen?
Zum Beispiel,
static void Main()
{
var someVar = 3;
Console.Write(GetVariableName(someVar));
}
Die Ausgabe dieses Programms sollte sein:
someVar
Wie kann ich das mit Hilfe der Reflexion erreichen?
Mit Reflection ist dies nicht möglich, da die Variablen nach der Kompilierung in AWL keinen Namen mehr haben. Sie können jedoch Ausdrucksbäume verwenden und die Variable zu einer Closure machen:
static string GetVariableName<T>(Expression<Func<T>> expr)
{
var body = (MemberExpression)expr.Body;
return body.Member.Name;
}
Sie können diese Methode wie folgt anwenden:
static void Main()
{
var someVar = 3;
Console.Write(GetVariableName(() => someVar));
}
Beachten Sie, dass dies ziemlich langsam ist, verwenden Sie es also nicht in leistungsrelevanten Pfaden Ihrer Anwendung. Jedes Mal, wenn dieser Code ausgeführt wird, werden mehrere Objekte erstellt (was zu GC-Druck führt), und unter dem Deckmantel werden viele nicht-inlinierbare Methoden aufgerufen und einige starke Reflexionen verwendet.
Ein ausführlicheres Beispiel finden Sie unter aquí .
UPDATE
Mit C# 6.0 wird die nameof
Schlüsselwort in die Sprache aufgenommen, das Folgendes ermöglicht:
static void Main()
{
var someVar = 3;
Console.Write(nameof(someVar));
}
Dies ist natürlich viel bequemer und hat die gleichen Kosten hat die Definition der Zeichenfolge als konstante String-Literal.
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.