CA2217: 열거형을 FlagsAttribute로 표시하지 마십시오.
TypeName |
DoNotMarkEnumsWithFlags |
CheckId |
CA2217 |
범주 |
Microsoft.Usage |
변경 수준 |
주요 변경 아님 |
원인
외부에서 볼 수 있는 열거형이 FlagsAttribute로 표시되어 있고, 2의 거듭제곱 또는 열거형에 정의된 다른 값의 조합이 아닌 값이 하나 이상 들어 있습니다.
규칙 설명
열거형에는 열거형에 정의된 각 값이 2의 거듭제곱이거나 정의된 값의 조합인 경우에만 FlagsAttribute가 존재할 수 있습니다.
위반 문제를 해결하는 방법
이 규칙 위반 문제를 해결하려면 열거형에서 FlagsAttribute를 제거합니다.
경고를 표시하지 않는 경우
이 규칙에서는 경고를 표시해야 합니다.
예제
다음 예제에서는 값 3이 들어 있는 Color라는 열거형을 보여 줍니다. 이 값은 2의 거듭제곱이 아니며 정의되어 있는 값의 조합이 아닙니다.따라서 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
};
}
다음 예제에서는 System.FlagsAttribute로 표시하기 위한 요구 사항에 맞는 Days라는 열거형을 보여 줍니다.
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로 표시하십시오.