nameof expression (C#-referens)
Ett nameof
uttryck genererar namnet på en variabel, typ eller medlem som strängkonstant. Ett nameof
uttryck utvärderas vid kompileringstillfället och har ingen effekt vid körning. När operanden är en typ eller ett namnområde är det producerade namnet inte fullständigt kvalificerat. I följande exempel visas användningen av ett nameof
uttryck:
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
Du kan använda ett nameof
uttryck för att göra argumentkontrollkoden mer underhållsbar:
public string Name
{
get => name;
set => name = value ?? throw new ArgumentNullException(nameof(value), $"{nameof(Name)} cannot be null");
}
Från och med C# 11 kan du använda ett nameof
uttryck med en metodparameter i ett attribut på en metod eller dess parameter. Följande kod visar hur du gör det för ett attribut för en metod, en lokal funktion och parametern för ett lambda-uttryck:
[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();
}
Ett nameof
uttryck med en parameter är användbart när du använder attributen för nullbar analys eller attributet CallerArgumentExpression.
När operand är en ordagrann @
identifierare är tecknet inte en del av namnet, vilket visas i följande exempel:
var @new = 5;
Console.WriteLine(nameof(@new)); // output: new
Språkspecifikation för C#
Mer information finns i avsnittet Namn på uttryck i C#-språkspecifikationen och funktionsspecifikationen C# 11 – Utökat nameof
omfång.