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 10 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