Partilhar via


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 ==.

Consulte também