Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Una expresión nameof genera el nombre de una variable, un tipo o un miembro como constante de cadena. La expresión nameof se evalúa en tiempo de compilación y no tiene efecto en tiempo de ejecución. Cuando el operando es un tipo o un espacio de nombres, el nombre generado no está completo. En el ejemplo siguiente se muestra el uso de una expresión 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
El ejemplo anterior mediante List<> se admite en C# 14 y versiones posteriores. Puede usar una expresión nameof para facilitar el mantenimiento del código de comprobación de argumentos:
public string Name
{
get => name;
set => name = value ?? throw new ArgumentNullException(nameof(value), $"{nameof(Name)} cannot be null");
}
Puede usar una nameof expresión con un parámetro de método dentro de un atributo en un método o su parámetro. En el código siguiente se muestra cómo hacerlo para un atributo en un método, una función local y el parámetro de una expresión lambda:
[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();
}
Una expresión nameof con un parámetro es útil cuando se usan los atributos de análisis que admiten valores NULL o el atributo CallerArgumentExpression.
Cuando el operando es un identificador textual, el @ carácter no forma parte del nombre, como se muestra en el ejemplo siguiente:
var @new = 5;
Console.WriteLine(nameof(@new)); // output: new
Especificación del lenguaje C#
Para obtener más información, vea la sección Nameof expressions (Expresiones de nombre) de la especificación del lenguaje C# y la especificación de características de ámbito extendidonameof.