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.