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