CA2013: No usar ReferenceEquals con tipos de valor

Propiedad Value
Identificador de la regla CA2013
Título No usar ReferenceEquals con tipos de valor
Categoría Confiabilidad
La corrección es problemática o no problemática Poco problemático
Habilitado de forma predeterminada en .NET 8 Como advertencia

Causa

Usar el método System.Object.ReferenceEquals para comprobar la igualdad de uno o varios tipos de valor.

Descripción de la regla

Al comparar valores mediante ReferenceEquals, si objA y objB son tipos de valor, se les aplica la conversión boxing antes de que se pasen al método ReferenceEquals. Esto significa que, aunque objA y objB representen la misma instancia de un tipo de valor, el método ReferenceEquals devuelve false, como se muestra en el ejemplo siguiente.

Cómo corregir infracciones

Para corregir la infracción, reemplácela por una comprobación de igualdad más adecuada, 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

Cuándo suprimir las advertencias

No se puede suprimir una advertencia de esta regla. Se recomienda usar el operador de igualdad más adecuado, como ==.

Consulte también