Share via


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 Bryta
Aktiverad som standard i .NET 8 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.

Se även