CA1069: Az enumerációkban nem lehetnek duplikált értékek

Tulajdonság Érték
Szabályazonosító CA1069
Cím Az enumerálásoknak nem szabad ismétlődő értékekkel rendelkezniük
Kategória Tervezés
A javítás romboló vagy nem romboló Szünetelés
Alapértelmezés szerint engedélyezve a .NET 10-ben Javaslatként
Alkalmazandó nyelvek C# és Visual Basic

Ok

Az enumerálásnak több tagja van, amelyek explicit módon ugyanazt az állandó értéket kapják.

Szabály leírása

Minden enumerálási tagnak egyedi állandó értékkel kell rendelkeznie, vagy explicit módon hozzá kell rendelnie egy korábbi taghoz az enumerálásban, hogy jelezze a megosztási érték kifejezett szándékát. Példa:

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.
}

Ez a szabály segít a következő forgatókönyvekből bevezetett funkcionális hibák kiszűrésében:

  • Véletlen gépelési hibák, amikor a felhasználó véletlenül ugyanazt az állandó értéket gépelte be több tag esetében.
  • Másolási és beillesztési hibák, ahol a felhasználó lemásolt egy meglévő tagmeghatározást, majd átnevezte a tagot, de elfelejtette módosítani az értéket.
  • Több ág feloldásának egyesítése, ahol egy új tag más néven lett hozzáadva, de ugyanazzal az értékkel a különböző ágakban.

Szabálysértések kijavítása

A szabálysértés kijavításához rendeljen hozzá egy új egyedi állandó értéket, vagy rendeljen hozzá egy korábbi tagot a számban, hogy jelezze az azonos érték megosztásának explicit szándékát. A következő kódrészlet például a szabály megsértését és a szabály kijavításának néhány módját mutatja be:

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
}

Mikor kell letiltani a figyelmeztetéseket?

Ne tiltsa le a szabály megsértését.

Lásd még