Compartir a través de


Expresión nameof (referencia de C#)

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.

La documentación de referencia del lenguaje C# cubre la versión más reciente publicada del lenguaje C#. También contiene documentación inicial sobre las características de las versiones preliminares públicas de la próxima versión del lenguaje.

La documentación identifica cualquier característica introducida por primera vez en las últimas tres versiones del idioma o en las versiones preliminares públicas actuales.

Sugerencia

Para buscar cuándo se introdujo por primera vez una característica en C#, consulte el artículo sobre el historial de versiones del lenguaje C#.

En el ejemplo siguiente se muestra cómo usar una nameof expresión:

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 que usa 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.

Consulte también