Выражение nameof (справочник по C#)

Выражение nameof создает имя переменной, типа или члена в качестве строковой константы. Значение выражения nameof вычисляется во время компиляции, и это не влияет на время выполнения. Если операнд является типом или пространством имен, то создаваемое имя не является полным. В следующем примере показано использование nameof выражения :

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

var 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

Если операнд является буквальным идентификатором, @ символ не является частью имени, как показано в следующем примере:

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

С помощью выражения nameof можно сделать код проверки аргументов более удобным:

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

Начиная с версии C# 11, вы можете использовать выражение nameof с параметром метода внутри атрибута в методе или его параметре. В следующем коде показано, как это сделать для атрибута метода, локальной функции и параметра лямбда-выражения.

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

Выражение nameof с параметром полезно использовать при использовании атрибутов анализа, допускающих значение NULL, или атрибута CallerArgumentExpression.

Спецификация языка C#

Дополнительные сведения см. в разделе Nameof expressionsспецификации языка C# и спецификации функции расширенной области C# 11nameof.

См. также раздел