Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
| Vlastnost | Hodnota |
|---|---|
| ID pravidla | CA2013 |
| Název | Nepoužívejte ReferenceEquals s typy hodnot |
| Kategorie | Spolehlivost |
| Oprava způsobující chybu nebo chybu způsobující chybu | Nenarušující |
| Povoleno ve výchozím nastavení v .NET 10 | Jako upozornění |
Příčina
Použití System.Object.ReferenceEquals metody k otestování jednoho nebo více typů hodnot pro rovnost.
Popis pravidla
Při porovnávání hodnot pomocí ReferenceEquals, pokud objA a objB jsou typy hodnot, jsou boxovány před jejich předáním metodě ReferenceEquals . To znamená, že i když objA i objB představují stejnou instanci typu hodnoty, ReferenceEquals metoda přesto vrátí false, jak ukazuje následující příklad.
Jak opravit porušení
Chcete-li opravit porušení, nahraďte ho vhodnější kontrolou rovnosti, například ==.
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
Kdy potlačit upozornění
Není bezpečné potlačit upozornění z tohoto pravidla. Doporučujeme použít vhodnější operátor rovnosti, například ==.