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

Vedi anche