Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
nameof Выражение создает имя переменной, типа или элемента в виде строковой константы. Значение выражения nameof вычисляется во время компиляции, и это не влияет на время выполнения. Если операнд является типом или пространством имен, создаваемое имя не является полным. В следующем примере показано использование nameof выражения:
Console.WriteLine(nameof(System.Collections.Generic)); // output: Generic
Console.WriteLine(nameof(List<int>)); // output: List
Console.WriteLine(nameof(List<>)); // 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
Приведенный выше пример использования List<> поддерживается в C# 14 и более поздних версиях. С помощью выражения nameof можно сделать код проверки аргументов более удобным:
public string Name
{
get => name;
set => name = value ?? throw new ArgumentNullException(nameof(value), $"{nameof(Name)} cannot be null");
}
Выражение можно использовать 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.
Если операнд является подробным идентификатором, @ символ не является частью имени, как показано в следующем примере:
var @new = 5;
Console.WriteLine(nameof(@new)); // output: new
Спецификация языка C#
Дополнительные сведения см. в разделе "Выражения Nameof"спецификации языка C# и nameof спецификации расширенных областей.