Partilhar via


CA1507: Uso nameof no lugar da string

Propriedade valor
ID da regra CA1507
Título Utilizar nameof em vez de string
Categoria Manutenibilidade
A correção causa interrupção ou não Ininterrupto
Habilitado por padrão no .NET 10 Como sugestão
Línguas aplicáveis C# e Visual Basic

Motivo

Um string literal ou constante que corresponde ao nome de um parâmetro do método de contenção ou o nome de uma propriedade do tipo que contém é usado como um argumento para um método.

Descrição da regra

A regra CA1507 sinaliza o uso de um literal string como argumento para um método ou construtor, onde uma expressão nameof (NameOf em Visual Basic) aumentaria a manutenibilidade. A regra é acionada se todas as seguintes condições forem atendidas:

  • O argumento é literal string ou constante.

  • O argumento corresponde a um parâmetro do tipo string do método ou do construtor que é invocado (ou seja, não há nenhuma conversão envolvida no local da chamada).

  • Uma das seguintes opções:

    • O nome declarado do parâmetro é paramName e o string valor constante do literal corresponde ao nome de um parâmetro do método, lambda ou função local dentro da qual o método ou construtor está sendo invocado.

    • O nome declarado do parâmetro é propertyName e o valor constante do string literal corresponde ao nome de uma propriedade do tipo dentro do qual o método ou construtor está sendo invocado.

A regra CA1507 melhora a manutenção do código nos casos em que o parâmetro pode ser renomeado no futuro, mas o string literal não é renomeado por engano. Usando nameof, o símbolo será renomeado quando o parâmetro for renomeado por meio de uma operação de refatoração. Além disso, quaisquer erros ortográficos no nome do parâmetro são detetados pelo compilador.

Como corrigir violações

Para corrigir uma violação, substitua o literal string por uma expressão nameof no Visual Basic (NameOf). Por exemplo, os dois trechos de código a seguir mostram uma violação da regra e como corrigi-la:

public Book(string title)
{
    // Violates rule CA1507
    Title = title ?? throw new ArgumentNullException("title", "All books must have a title.");
}
public Book(string title)
{
    // Resolves rule CA1507 violation
    Title = title ?? throw new ArgumentNullException(nameof(title), "All books must have a title.");
}

Gorjeta

Uma correção de código está disponível para essa regra no Visual Studio. Para utilizar, coloque o cursor sobre o string literal e pressione Ctrl+. Escolha Use nameof para expressar nomes de símbolos da lista de opções apresentada.

Correção de código para CA1507 - use nameof para expressar nomes de símbolos

Quando suprimir avisos

É seguro suprimir uma violação dessa regra se você não estiver preocupado com a capacidade de manutenção do seu código.

Suprimir um aviso

Se você quiser apenas suprimir uma única violação, adicione diretivas de pré-processador ao seu arquivo de origem para desativar e, em seguida, reativar a regra.

#pragma warning disable CA1507
// The code that's violating the rule is on this line.
#pragma warning restore CA1507

Para desabilitar a regra de um arquivo, pasta ou projeto, defina sua gravidade como none no arquivo de configuração.

[*.{cs,vb}]
dotnet_diagnostic.CA1507.severity = none

Para obter mais informações, consulte Como suprimir avisos de análise de código.

Consulte também