Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
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.