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() { 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 wörtlicher Bezeichner ist, ist das Zeichen @ nicht Teil eines 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.

Weitere Informationen