CA1500: Nomes de variável não devem corresponder a nomes de campo

Item Valor
RuleId CA1500
Categoria Microsoft.Maintainability
Alteração da falha Quando acionado em um parâmetro que tem o mesmo nome de um campo:

- Sem interrupção – Se o campo e o método que declara o parâmetro não puderem ser vistos fora do assembly, independentemente da alteração que fizer.
- Interromper - Se você alterar o nome do campo e puder ser visto fora do assembly.
- Interromper - Se você alterar o nome do parâmetro e o método que o declara puder ser visto fora do assembly.

Quando acionado em uma variável local que tem o mesmo nome de um campo:

- Sem interrupção – Se o campo não puder ser visto fora do assembly, independentemente da alteração que fizer.
- Sem interrupção – Se você alterar o nome da variável local e não alterar o nome do campo.
- Interromper - Se você alterar o nome do campo e ele puder ser visto fora do assembly.

Causa

Um método de instância declara um parâmetro ou uma variável local cujo nome corresponde a um campo da instância do tipo declarante. Para capturar as variáveis locais que violam a regra, o assembly testado deve ser criado usando informações de depuração e o arquivo de banco de dados do programa associado (.pdb) deve estar disponível.

Descrição da regra

Quando o nome de um campo de instância corresponde a um parâmetro ou um nome de variável local, o campo de instância é acessado usando a palavra-chave this (Me no Visual Basic) quando dentro do corpo do método. Ao manter o código, é fácil esquecer essa diferença e supor que o parâmetro/variável de local se refere ao campo de instância, o que leva a erros. Isso é verdadeiro especialmente para corpos de métodos longos.

Como corrigir violações

Para corrigir uma violação dessa regra, renomeie o parâmetro/variável ou o campo.

Quando suprimir avisos

Não suprima um aviso nessa regra.

Exemplo

O exemplo a seguir mostra duas violações da regra.

using System;

namespace MaintainabilityLibrary
{
   class MatchingNames
   {
      int someField;
   
      void SomeMethodOne(int someField) {}
      
      void SomeMethodTwo()
      {
         int someField;
      }
   }
}