CA1069: перечисления не должны иметь повторяющиеся значения
Свойство | Значение |
---|---|
Идентификатор правила | CA1069 |
Заголовок | перечисления не должны иметь повторяющихся значений |
Категория | Проектирование |
Исправление является критическим или не критическим | Критическое |
Включен по умолчанию в .NET 9 | Как предложение |
Причина
Перечисление содержит несколько элементов, которым явным образом присвоено одно и то же значение константы.
Описание правила
Каждый элемент перечисления должен иметь уникальное константное значение или явно назначаться предыдущим элементом перечисления, чтобы указать явное намерение совместного использования значения. Например:
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 = 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
}
Когда лучше отключить предупреждения
Не отключайте предупреждения для этого правила.