nameof-Ausdruck (C#-Referenz)
Ein nameof
-Ausdruck erzeugt den Namen einer Variablen, eines Typs oder eines Members als Zeichenfolgenkonstante. Ein nameof
-Ausdruck wird zur Kompilierzeit ausgewertet und hat zur Laufzeit keine Auswirkung. Wenn der Operand ein Typ oder ein Namespace ist, ist der erzeugte Name nicht vollqualifiziert. Das folgende Beispiel zeigt die Verwendung eines nameof
-Ausdrucks:
Console.WriteLine(nameof(System.Collections.Generic)); // output: Generic
Console.WriteLine(nameof(List<int>)); // output: List
Console.WriteLine(nameof(List<int>.Count)); // output: Count
Console.WriteLine(nameof(List<int>.Add)); // output: Add
List<int> numbers = new List<int>() { 1, 2, 3 };
Console.WriteLine(nameof(numbers)); // output: numbers
Console.WriteLine(nameof(numbers.Count)); // output: Count
Console.WriteLine(nameof(numbers.Add)); // output: Add
Sie können einen nameof
-Ausdruck nutzen, um den Code zur Argumentüberprüfung besser verwalten zu können:
public string Name
{
get => name;
set => name = value ?? throw new ArgumentNullException(nameof(value), $"{nameof(Name)} cannot be null");
}
Ab C# 11 können Sie einen nameof
-Ausdruck mit einem Methodenparameter innerhalb eines Attributs für eine Methode oder ihren Parameter verwenden. Der folgende Code zeigt, wie dies für ein Attribut einer Methode, eine lokale Funktion und den Parameter eines Lambdaausdrucks erfolgen kann:
[ParameterString(nameof(msg))]
public static void Method(string msg)
{
[ParameterString(nameof(T))]
void LocalFunction<T>(T param) { }
var lambdaExpression = ([ParameterString(nameof(aNumber))] int aNumber) => aNumber.ToString();
}
Ein nameof
-Ausdruck mit einem Parameter ist nützlich, wenn Sie die Nullable-Analyseattribute oder das CallerArgumentExpression-Attribut verwenden.
Wenn der Operand ein Verbatimbezeichner ist, ist das @
Zeichen nicht Teil des Namens, wie im folgenden Beispiel gezeigt:
var @new = 5;
Console.WriteLine(nameof(@new)); // output: new
C#-Sprachspezifikation
Weitere Informationen finden Sie im Abschnitt Nameof-Ausdrücke der C#-Sprachspezifikation und in der Featurespezifikation C# 11 – Erweiterter nameof
-Bereich.