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, která může být destruktivní nebo nedestruktivní Přerušující
Povoleno ve výchozím nastavení v .NET 10 Jako návrh
Příslušné jazyky C# a Visual Basic

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ů.
  • Chyby kopírování a vkládání, kdy uživatel zkopíruje existující definici člena, následně člena přejmenuje, ale zapomene změnit hodnotu.
  • Sloučení řešení konfliktů z více větví, kde byl nový člen s jiným názvem přidán, ale se 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é