CA2013: Använd inte ReferenceEquals med värdetyper

Property Värde
Regel-ID CA2013
Title Använd inte ReferenceEquals med värdetyper
Kategori Tillförlitlighet
Korrigeringen är icke-bakåtkompatibel Icke-icke-bryta
Aktiverad som standard i .NET 8 Som varning

Orsak

Använda System.Object.ReferenceEquals metoden för att testa en eller flera värdetyper för likhet.

Regelbeskrivning

När du jämför värden med , ReferenceEqualsom objA och objB är värdetyper, boxas de innan de skickas till ReferenceEquals metoden. Det innebär att även om både objA och objB representerar samma instans av en värdetyp, ReferenceEquals returnerar metoden ändå false, vilket visas i följande exempel.

Så här åtgärdar du överträdelser

Åtgärda överträdelsen genom att ersätta den med en lämpligare likhetskontroll, ==till exempel .


    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

När du ska ignorera varningar

Det är inte säkert att ignorera en varning från den här regeln. Vi rekommenderar att du använder den lämpligare likhetsoperatorn, till exempel ==.

Se även