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:
Quando disparado em uma variável local tem o mesmo nome de um campo:
|
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;
}
}
}