Sdílet prostřednictvím


CA1069: Výčty by neměly mít duplicitní hodnoty

Vlastnost Hodnota
ID pravidla CA1069
Název Výčty by neměly mít duplicitní hodnoty.
Kategorie Návrh
Oprava způsobující chybu nebo chybu způsobující chybu Narušující
Povoleno ve výchozím nastavení v .NET 9 Jako návrh

Příčina

Výčet obsahuje více členů, kterým je explicitně přiřazena stejná konstantní hodnota.

Popis pravidla

Každý člen výčtu by měl mít buď jedinečnou konstantní hodnotu, nebo musí být explicitně přiřazen s předchozím členem v výčtu, aby určil explicitní záměr sdílení hodnoty. Příklad:

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

Toto pravidlo pomáhá při zachytávání funkčních chyb zavedených z následujících scénářů:

  • Náhodné překlepy, kdy uživatel omylem zadal stejnou konstantní hodnotu pro více členů.
  • Zkopírujte chyby vložení, kdy uživatel zkopíroval existující definici člena a pak člena přejmenoval, ale zapomněl změnit hodnotu.
  • Sloučení rozlišení z více větví, kde byl nový člen přidán s jiným názvem, ale stejnou hodnotou v různých větvích.

Jak opravit porušení

Chcete-li opravit porušení, přiřaďte novou jedinečnou konstantní hodnotu nebo přiřaďte předchozí člen v výčtu, aby bylo zřejmé explicitní záměr sdílení stejné hodnoty. Například následující fragment kódu ukazuje porušení pravidla a několik způsobů, jak toto porušení opravit:

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
}

Kdy potlačit upozornění

Nepotlačujte porušení tohoto pravidla.

Viz také