CA1507: Uso nameof
no lugar da string
Property | valor |
---|---|
ID da regra | CA1507 |
Título | Uso nameof no lugar de string |
Categoria | Manutenibilidade |
A correção está quebrando ou não quebrando | Sem quebra |
Habilitado por padrão no .NET 8 | Como sugestão |
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 como um argumento para um método ou construtor onde um string
nome de expressão (NameOf
no Visual Basic) adicionaria capacidade de manutenção. A regra é acionada se todas as seguintes condições forem atendidas:
O argumento é literal
string
ou constante.O argumento corresponde a um
string
parâmetro -typed do método ou do construtor que está sendo invocado (ou seja, não há nenhuma conversão envolvida no site de chamada).Uma das seguintes opções:
O nome declarado do parâmetro é
paramName
e ostring
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 dostring
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. nameof
Usando , 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 string
literal por um nameof (NameOf
no Visual Basic) expressão. 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 usá-lo, posicione o cursor sobre o string
literal e pressione Ctrl+. Escolha Usar nomede para expressar nomes de símbolos na lista de opções apresentada.
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 para um arquivo, pasta ou projeto, defina sua severidade 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.