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