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 Projekt
Poprawka powodująca niezgodność lub niezgodność Kluczowa
Domyślnie włączone na platformie .NET 9 Jako sugestia

Przyczyna

Wyliczenie ma wiele elementów członkowskich, 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ć jawnie przypisany do poprzedniego elementu członkowskiego w wyliczenie, aby wskazać jawną intencję udostępniania 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 wpisywanie błędów, w których użytkownik przypadkowo wpisił tę samą stałą wartość dla wielu elementów członkowskich.
  • Skopiuj błędy wklejania, w których użytkownik skopiował istniejącą definicję elementu członkowskiego, a następnie zmienił nazwę elementu członkowskiego, ale nie pamiętał o zmianie wartości.
  • Scal rozpoznawanie z wielu gałęzi, gdzie nowy element członkowski został dodany o innej nazwie, ale tej samej wartości w różnych gałęziach.

Jak naprawić naruszenia

Aby naprawić naruszenie, przypisz nową unikatową wartość stałą lub przypisz poprzedni element członkowski w wyliczenia, aby wskazać jawną intencję udostępniania tej samej 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 pomijaj naruszeń tej reguły.

Zobacz też