Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
| 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 10 | 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.