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.