CA2013: Non usare ReferenceEquals con tipi valore
Proprietà | valore |
---|---|
ID regola | CA2013 |
Title | Non usare ReferenceEquals con tipi valore |
Categoria | Affidabilità |
Correzione che causa un'interruzione o un'interruzione | Nessuna interruzione |
Abilitato per impostazione predefinita in .NET 8 | Come avviso |
Causa
Utilizzo del System.Object.ReferenceEquals metodo per testare uno o più tipi di valore per verificare l'uguaglianza.
Descrizione regola
Quando si confrontano i valori usando ReferenceEquals, se objA e objB sono tipi valore, vengono inseriti nella casella prima che vengano passati al ReferenceEquals metodo . Ciò significa che anche se sia objA che objB rappresentano la stessa istanza di un tipo valore, il ReferenceEquals metodo restituisce comunque false, come illustrato nell'esempio seguente.
Come correggere le violazioni
Per correggere la violazione, sostituirla con un controllo di uguaglianza più appropriato, ==
ad esempio .
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 eliminare gli avvisi
Non è sicuro eliminare un avviso da questa regola. È consigliabile usare l'operatore di uguaglianza più appropriato, ad esempio ==
.