Megosztás a következőn keresztül:


CA1069: A számokat nem szabad duplikálni

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 Design
A javítás kompatibilitástörő vagy nem törik Törés
Alapértelmezés szerint engedélyezve a .NET 8-ban Javaslatként

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éldául:

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.
  • Beillesztési hibák másolása, ahol a felhasználó átmásolt egy meglévő tagdefiníciót, majd átnevezte a tagot, de elfelejtette módosítani az értéket.
  • Több ág felbontásának egyesítése, ahol egy új tag más néven lett hozzáadva, de ugyanaz az érték 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.

Kapcsolódó információk