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

Confira também