Поделиться через


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

TypeName

DoNotMarkEnumsWithFlags

CheckId

CA2217

Категория

Microsoft.Usage

Критическое изменение

Не критическое

Причина

Видимое извне перечисление помечено атрибутом FlagsAttribute и имеет одно или несколько значений, которые не являются степенями двух или комбинацией других определенных значений в перечислении.

Описание правила

Перечисление должно иметь атрибут FlagsAttribute, только если каждое значение, определенное в перечислении, является степенью двух или комбинацией определенных значений.

Устранение нарушений

Чтобы устранить нарушение данного правила, удалите атрибут FlagsAttribute из перечисления.

Отключение предупреждений

Для этого правила отключать вывод предупреждений не следует.

Пример

В следующем примере показано перечисление "Color", которое содержит значение 3, не являющееся степенью двух или сочетанием других определенных значений. Перечисление "Color" не должно быть помечено атрибутом FlagsAttribute.

Imports System

Namespace Samples

    ' Violates this rule    
    <FlagsAttribute()> _
    Public Enum Color

        None = 0
        Red = 1
        Orange = 3
        Yellow = 4

    End Enum
End Namespace
using System;

namespace Samples
{    
    // Violates this rule    
    [FlagsAttribute]        
    public enum Color
    { 
        None    = 0, 
        Red     = 1, 
        Orange  = 3, 
        Yellow  = 4 
    }
}

using namespace System;

namespace Samples 
{
    // Violates this rule    
    [FlagsAttribute]    
    public enum class Color    
    {        
        None   = 0,        
        Red    = 1,        
        Orange = 3,        
        Yellow = 4    
    };
}

В следующем примере показано перечисление "Days", которое соответствует требованиям для пометки атрибутом System.FlagsAttribute.

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

using System;

namespace Samples
{    
    [FlagsAttribute]    
    public enum Days    
    {        
        None        = 0,        
        Monday      = 1,        
        Tuesday     = 2,        
        Wednesday   = 4,        
        Thursday    = 8,        
        Friday      = 16,        
        All         = Monday| Tuesday | Wednesday | Thursday | Friday    
    }
}

using namespace System;

namespace Samples 
{    
    [FlagsAttribute]    
    public enum class Days    
    {        
        None        = 0,        
        Monday      = 1,        
        Tuesday     = 2,        
        Wednesday   = 4,        
        Thursday    = 8,        
        Friday      = 16,        
        All         = Monday| Tuesday | Wednesday | Thursday | Friday    
    };
}

Связанные правила

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

См. также

Ссылки

System.FlagsAttribute