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