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 ett namn, 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.

Se även