CA2013: Nepoužívejte referenceEquals s typy hodnot

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

Viz také