CA2013: Não use ReferenceEquals com tipos de valor
Property | valor |
---|---|
ID da regra | CA2013 |
Título | Não use ReferenceEquals com tipos de valor |
Categoria | Fiabilidade |
A correção está quebrando ou não quebrando | Sem quebra |
Habilitado por padrão no .NET 8 | Como aviso |
Motivo
Usando System.Object.ReferenceEquals o método para testar um ou mais tipos de valor para igualdade.
Descrição da regra
Ao comparar valores usando ReferenceEquals, se objA e objB são tipos de valor, eles são encaixotados antes de serem passados para o ReferenceEquals método. Isso significa que, mesmo que objA e objB representem a mesma instância de um tipo de valor, o método retorna false, como mostra o ReferenceEquals 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
Não é seguro suprimir uma advertência desta regra. Recomendamos o uso do operador de igualdade mais apropriado, como ==
.