Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
| 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 10 | 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 ==.