CA1069: Uppräkningar bör inte ha duplicerade värden
Property | Värde |
---|---|
Regel-ID | CA1069 |
Title | Uppräkningar bör inte ha duplicerade värden |
Kategori | Designa |
Korrigeringen är icke-bakåtkompatibel | Brott |
Aktiverad som standard i .NET 9 | Som förslag |
Orsak
En uppräkning har flera medlemmar som uttryckligen tilldelas samma konstanta värde.
Regelbeskrivning
Varje uppräkningsmedlem ska antingen ha ett unikt konstant värde eller uttryckligen tilldelas en tidigare medlem i uppräkningen för att ange explicit avsikt att dela värde. Till exempel:
enum E
{
Field1 = 1,
AnotherNameForField1 = Field1, // This is fine
Field2 = 2,
Field3 = 2, // CA1069: This is not fine. Either assign a different constant value or 'Field2' to indicate explicit intent of sharing value.
}
Den här regeln hjälper till att fånga funktionella buggar som introduceras från följande scenarier:
- Oavsiktliga skrivfel, där användaren av misstag skrev samma konstanta värde för flera medlemmar.
- Kopiera klistra in misstag, där användaren kopierade en befintlig medlemsdefinition, bytte sedan namn på medlemmen men glömde att ändra värdet.
- Sammanfoga upplösning från flera grenar, där en ny medlem lades till med ett annat namn men samma värde i olika grenar.
Så här åtgärdar du överträdelser
Om du vill åtgärda en överträdelse tilldelar du antingen ett nytt unikt konstantvärde eller tilldelar med en tidigare medlem i uppräkningen för att ange explicit avsikt att dela samma värde. Följande kodfragment visar till exempel ett brott mot regeln och några sätt att åtgärda överträdelsen:
enum E
{
Field1 = 1,
AnotherNameForField1 = Field1, // This is fine
Field2 = 2,
Field3 = 2, // CA1069: This is not fine. Either assign a different constant value or 'Field2' to indicate explicit intent of sharing value.
}
enum E
{
Field1 = 1,
AnotherNameForField1 = Field1, // This is fine
Field2 = 2,
Field3 = 3, // This is now fine
}
enum E
{
Field1 = 1,
AnotherNameForField1 = Field1, // This is fine
Field2 = 2,
Field3 = Field2, // This is also fine
}
När du ska ignorera varningar
Undertryck inte överträdelser av den här regeln.