CA2013: Não usar ReferenceEquals com tipos de valor
Property | Valor |
---|---|
ID da regra | CA2013 |
Título | Não usar ReferenceEquals com tipos de valor |
Categoria | Confiabilidade |
Correção interruptiva ou sem interrupção | Sem interrupção |
Habilitado por padrão no .NET 8 | Como aviso |
Causa
Uso do método System.Object.ReferenceEquals para testar um ou mais tipos de valor quanto à igualdade.
Descrição da regra
Ao comparar valores usando ReferenceEquals, se objA e objB forem tipos de valor, serão demarcados antes de serem transmitidos ao método ReferenceEquals. Isso significa que, mesmo que objA e objB representem a mesma instância de um tipo de valor, o método ReferenceEquals retorna false, como mostra o exemplo a seguir.
Como corrigir violações
Para corrigir a violação, substitua-a por uma verificação de igualdade mais apropriada, como ==
.
int int1 = 1, int2 = 1;
// Violation occurs, returns false.
Console.WriteLine(Object.ReferenceEquals(int1, int2)); // false
// Use appropriate equality operator or method instead
Console.WriteLine(int1 == int2); // true
Console.WriteLine(object.Equals(int1, int2)); // true
Quando suprimir avisos
É seguro suprimir um aviso dessa regra. É recomendável usar o operador de igualdade mais apropriado, como ==
.