Compartilhar via


CA2013: Não usar ReferenceEquals com tipos de valor

Propriedade Valor
ID da regra CA2013
Título Não use ReferenceEquals com tipos de valor
Categoria Confiabilidade
Correção interruptiva ou sem interrupção Inquebrável
Habilitado por padrão no .NET 10 Como aviso
Idiomas aplicáveis C# e Visual Basic

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

Não é seguro suprimir um aviso dessa regra. É recomendável usar o operador de igualdade mais apropriado, como ==.

Confira também