CA2013: Nie używaj właściwości ReferenceEquals z typami wartości

Właściwości Wartość
Identyfikator reguły CA2013
Tytuł Nie używaj metody ReferenceEquals z typami wartości
Kategoria Niezawodność
Poprawka powodująca niezgodność lub niezgodność Niezgodność
Domyślnie włączone na platformie .NET 8 Jako ostrzeżenie

Przyczyna

Używanie System.Object.ReferenceEquals metody do testowania co najmniej jednego typu wartości pod kątem równości.

Opis reguły

Podczas porównywania wartości przy użyciu metody ReferenceEquals, jeśli objA i objB są typami wartości, są one w polu przed przekazaniem ReferenceEquals ich do metody . Oznacza to, że nawet jeśli zarówno objA, jak i objB reprezentują to samo wystąpienie typu wartości, ReferenceEquals metoda zwraca jednak wartość false, jak pokazano w poniższym przykładzie.

Jak naprawić naruszenia

Aby naprawić naruszenie, zastąp go bardziej odpowiednim sprawdzaniem równości, takim jak ==.


    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

Kiedy pomijać ostrzeżenia

Nie można bezpiecznie pominąć ostrzeżenia z tej reguły. Zalecamy użycie bardziej odpowiedniego operatora równości, takiego jak ==.

Zobacz też