CA2217: не следует помечать перечисления атрибутом FlagsAttribute
Свойство | Значение |
---|---|
Идентификатор правила | CA2217 |
Заголовок | Не помечайте перечисляемые типы с помощью FlagsAttribute |
Категория | Использование |
Исправление является критическим или не критическим | Не критическое |
Включен по умолчанию в .NET 9 | No |
Причина
Перечисление помечено атрибутом FlagsAttribute и имеет одно или несколько значений, которые не являются степенью двух или сочетанием других определенных значений в перечислении.
По умолчанию это правило проверяет только видимые извне перечисления, но это поведение можно настроить.
Описание правила
Перечисление должно иметь FlagsAttribute, только если каждое значение, определенное в перечислении, является степенью двух или сочетанием определенных значений.
Устранение нарушений
Чтобы устранить нарушение этого правила, удалите FlagsAttribute из перечисления.
Когда лучше отключить предупреждения
Для этого правила отключать вывод предупреждений не следует.
Настройка кода для анализа
Используйте следующий параметр, чтобы выбрать части базы кода для применения этого правила.
Этот параметр можно настроить только для этого правила, для всех правил, к которым он применяется, или для всех правил в этой категории (использование), к которым она применяется. Дополнительные сведения см. в статье Параметры конфигурации правила качества кода.
Включение определенных контактных зон API
Вы можете настроить, для каких частей базы кода следует выполнять это правило в зависимости от их доступности. Например, чтобы указать, что правило должно выполняться только для закрытой контактной зоны API, добавьте следующую пару "ключ-значение" в файл EDITORCONFIG в своем проекте:
dotnet_code_quality.CAXXXX.api_surface = private, internal
Примеры
В следующем коде показано перечисление Color
, которое содержит значение 3. 3 не является степенью двух или сочетанием любого из определенных значений. Перечисление Color
не должно быть помечено атрибутом FlagsAttribute.
// Violates this rule
[FlagsAttribute]
public enum Color
{
None = 0,
Red = 1,
Orange = 3,
Yellow = 4
}
Imports System
Namespace Samples
' Violates this rule
<FlagsAttribute()> _
Public Enum Color
None = 0
Red = 1
Orange = 3
Yellow = 4
End Enum
End Namespace
В следующем коде показано перечисление Days
, которое соответствует требованиям для пометки атрибутом FlagsAttribute:
[FlagsAttribute]
public enum Days
{
None = 0,
Monday = 1,
Tuesday = 2,
Wednesday = 4,
Thursday = 8,
Friday = 16,
All = Monday | Tuesday | Wednesday | Thursday | Friday
}
Imports System
Namespace Samples
<FlagsAttribute()> _
Public Enum Days
None = 0
Monday = 1
Tuesday = 2
Wednesday = 4
Thursday = 8
Friday = 16
All = Monday Or Tuesday Or Wednesday Or Thursday Or Friday
End Enum
End Namespace
Связанные правила
CA1027: следует помечать перечисления атрибутом FlagsAttribute