Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
| Właściwości | Wartość |
|---|---|
| Identyfikator reguły | CA1069 |
| Tytuł | Wyliczenia nie powinny mieć zduplikowanych wartości |
| Kategoria | Projektowanie |
| Poprawka łamiąca lub nienaruszająca | Przełomowe |
| Domyślnie włączone na platformie .NET 10 | Jako sugestia |
| Zastosowane języki | C# i Visual Basic |
Przyczyna
Wyliczenie ma wiele elementów, które są jawnie przypisane do tej samej wartości stałej.
Opis reguły
Każdy element członkowski wyliczenia powinien mieć unikatową wartość stałą lub być wyraźnie przypisany do poprzedniego elementu członkowskiego w wyliczeniu, aby wskazać jawną intencję dzielenia wartości. Na przykład:
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.
}
Ta reguła pomaga w przechwytywaniu usterek funkcjonalnych wprowadzonych w następujących scenariuszach:
- Przypadkowe błędy pisarskie, w których użytkownik przypadkowo wpisał tę samą stałą wartość dla wielu członków.
- Błędy kopiowania i wklejania, w których użytkownik skopiował istniejącą definicję członka, a następnie zmienił nazwę członka, ale zapomniał zmienić wartość.
- Scal rozwiązywanie konfliktów z wielu gałęzi, w których nowy członek został dodany z inną nazwą, ale tą samą wartością w różnych gałęziach.
Jak naprawić naruszenia
Aby naprawić naruszenie, przypisz nową unikatową wartość stałą lub przypisz wartość z wcześniejszego elementu członkowskiego w wyliczeniu, aby wyraźnie wskazać intencję dzielenia się tą samą wartością. Na przykład poniższy fragment kodu przedstawia naruszenie reguły i kilka sposobów naprawienia naruszenia:
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
}
Kiedy pomijać ostrzeżenia
Nie ukrywaj naruszeń tej reguły.