Nomes de variáveis não devem corresponder a nomes de campo

TypeName

VariableNamesShouldNotMatchFieldNames

CheckId

CA1500

Category (Categoria)

Microsoft.Maintainability

Quebrando alterar

Quando acionado em um parâmetro que tem o mesmo nome de um campo:

  • Não separável - se o campo e o método que declara o parâmetro não forem visíveis fora do assembly, independentemente da alterar feita.

  • Dividindo - se você alterar o nome do campo e ele estiver visível fora do assembly.

  • Dividindo - se você alterar o nome do parâmetro e o método que declara que ele está visível fora do assembly.

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

  • Não separável - se o campo não estiver visível fora do assembly, independentemente da alterar feita.

  • Não separável - se você alterar o nome da variável local e não altere o nome do campo.

  • Dividindo - se você alterar o nome do campo e ele estiver visível fora do assembly.

Causa

Um método de instância declara um parâmetro ou uma variável local cujo nome corresponda a um campo de instância do tipo declarativo.Para capturar as variáveis locais que violam a regra, o assembly testado deve ser construído com informações de depuração e o arquivo de banco de dados (.pdb) do programa associado 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 através de this (Me no Visual Basic) palavra-chave quando dentro do corpo de método. Mantendo o código, é fácil esquecer essa diferença e assumir que a variável local ou parâmetro se refere ao campo instância, entrelinhamento a erros.Isso vale especialmente para os corpos de método longo.

Como corrigir violações

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

Quando suprimir avisos

Não suprimir um aviso da regra.

Exemplo

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

Imports System

Namespace MaintainabilityLibrary

   Class MatchingNames

      Dim someField As Integer

      Sub SomeMethodOne(someField As Integer)
      End Sub

      Sub SomeMethodTwo()
         Dim someField As Integer
      End Sub

   End Class

End Namespace
using System;

namespace MaintainabilityLibrary
{
   class MatchingNames
   {
      int someField;

      void SomeMethodOne(int someField) {}

      void SomeMethodTwo()
      {
         int someField;
      }
   }
}

Embora essa regra não é disparado no construtores, ele será acionado no parâmetro de someField declarado no método Init no seguinte padrão comuns:

using System;

namespace MaintainabilityLibrary
{    
    class MatchingNames    
    {        
        int someField;

        public MatchingNames(int someField) // Does not violate VariableNamesShouldNotMatchFieldNames             {            
            Init(someField);        
        }

        private void Init(int someField)  // Violates VariableNamesShouldNotMatchFieldNames        
        {            
            this.someField = someField;        
        }    
    }
}