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