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