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, maakt het @
teken geen deel uit van de 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.