Udostępnij za pośrednictwem


CA2013: Nie używaj metody 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 łamiąca lub nienaruszająca Niezgodność
Domyślnie włączone na platformie .NET 10 Jako ostrzeżenie
Zastosowane języki C# i Visual Basic

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 ReferenceEquals, jeśli objA i objB są typami wartości, są pakowane przed przekazaniem do metody ReferenceEquals. 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 jest bezpieczne pominięcie ostrzeżenia z tej reguły. Zalecamy użycie bardziej odpowiedniego operatora równości, takiego jak ==.

Zobacz też