Compartilhar via


expressão nameof (referência do C#)

A expressão nameof produz o nome de uma variável, de um tipo ou membro como a constante de cadeia de caracteres. A expressão nameof é avaliada em tempo de compilação e não tem efeitos em tempo de execução. Quando o operando é um tipo ou um namespace, o nome produzido não é totalmente qualificado.

A linguagem C# faz referência a documentos da versão mais recentemente lançada da linguagem C#. Ele também contém a documentação inicial para funcionalidades em pré-visualizações públicas para o próximo lançamento do idioma.

A documentação identifica qualquer recurso introduzido pela primeira vez nas três últimas versões do idioma ou nas versões prévias públicas atuais.

Dica

Para descobrir quando um recurso foi introduzido pela primeira vez em C#, consulte o artigo sobre o histórico de versão da linguagem C#.

O exemplo a seguir mostra como usar uma nameof expressão:

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

O exemplo anterior que usa List<> tem suporte no C# 14 e posterior. Você pode usar uma expressão nameof para tornar o código de verificação de argumentos mais passível de manutenção:

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

Você pode usar uma nameof expressão com um parâmetro de método dentro de um atributo em um método ou seu parâmetro. O código a seguir mostra como fazer isso para um atributo em um método, uma função local e o parâmetro de uma expressão 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();
}

Uma expressão nameof com um parâmetro é útil quando você usa os atributos de análise anuláveis ou o atributo CallerArgumentExpression.

Quando o operando é um identificador literal, o @ caractere não faz parte do nome, como mostra o exemplo a seguir:

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

Especificação da linguagem C#

Para obter mais informações, consulte a seção Expressões Nameof da especificação da linguagem C# e a especificação de recurso de escopo estendidonameof.

Confira também