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:

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

Como se muestra en el ejemplo anterior, en el caso de un tipo y un espacio de nombres, el nombre generado no está completo.

En el caso de identificadores textuales, el carácter @ no es parte de un nombre, como se muestra en el ejemplo siguiente:

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

La expresión nameof se evalúa en tiempo de compilación y no tiene efecto en tiempo de ejecución.

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");
}

A partir de C# 11, 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 nameof expresión con un parámetro es útil cuando se usan los atributos de análisis que aceptan valores NULL o el atributo CallerArgumentExpression.

Especificación del lenguaje C#

Para obtener más información, vea la sección Expresiones nameof de la especificación del lenguaje C# y la especificación de características de ámbito extendido nameof de C# 11 .

Vea también