CA2217: не следует помечать перечисления атрибутом FlagsAttribute

Свойство Значение
Идентификатор правила CA2217
Заголовок Не помечайте перечисляемые типы с помощью FlagsAttribute
Категория Использование
Исправление является критическим или не критическим Не критическое
Включен по умолчанию в .NET 8 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

См. также