Udostępnij za pośrednictwem


CA1069: Wyliczenia nie powinny mieć zduplikowanych wartości

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.

Zobacz też