naamvan expressie (C#-verwijzing)

Een nameof expressie produceert de naam van een variabele, type of lid als de tekenreeksconstante. Een nameof expressie wordt geƫvalueerd tijdens het compileren en heeft geen effect tijdens runtime. Wanneer de operand een type of een naamruimte is, is de geproduceerde naam niet volledig gekwalificeerd. In het volgende voorbeeld ziet u het gebruik van een nameof expressie:

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

U kunt een nameof expressie gebruiken om de code voor argumentcontrole beter te onderhouden:

public string Name
{
    get => name;
    set => name = value ?? throw new ArgumentNullException(nameof(value), $"{nameof(Name)} cannot be null");
}

Vanaf C# 11 kunt u een nameof expressie gebruiken met een methodeparameter in een kenmerk voor een methode of de bijbehorende parameter. De volgende code laat zien hoe u dit doet voor een kenmerk op een methode, een lokale functie en de parameter van een lambda-expressie:

[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();
}

Een nameof expressie met een parameter is handig wanneer u de nullable-analysekenmerken of het kenmerk CallerArgumentExpression gebruikt.

Wanneer de operand een verbatim-id is, is het @ teken niet het deel van een naam, zoals in het volgende voorbeeld wordt weergegeven:

var @new = 5;
Console.WriteLine(nameof(@new));  // output: new

C#-taalspecificatie

Zie de sectie Nameof-expressies van de C#-taalspecificatie en de specificatie van de C# 11 - Uitgebreide nameof bereikfunctie voor meer informatie.

Zie ook