단일 값에 대한 [플래그] 열거 값 테스트
문제
내가있는 경우 enum
그것은 표시되어 있습니다 [Flags]
, .NET 에이 유형의 값을 테스트하여 단일 값 만 포함되어 있는지 확인하는 방법이 있습니까? 비트 계산을 사용하고 싶은 결과를 얻을 수 있지만 가능한 경우 내장 기능을 사용하고 싶습니다.
반복 할 때 enum
동적으로 값, Enum.GetValues()
조합 플래그도 반환합니다. 그 기능을 enum
다음 예에서는 4 값을 반환합니다. 그러나 나는 가치를 원하지 않습니다 조합 내부 알고리즘에 포함됩니다. 개인 테스트 개인 enum
이후 평등의 값이 나왔습니다 enum
잠재적으로 많은 값을 포함 할 수 있으며, 값이 enum
변화.
[Flags]
enum MyEnum
{
One = 1,
Two = 2,
Four = 4,
Seven = One | Two | Four,
}
void MyFunction()
{
foreach (MyEnum enumValue in Enum.GetValues(typeof(MyEnum)))
{
if (!_HasSingleValue(enumValue)) continue;
// Guaranteed that enumValue is either One, Two, or Four
}
}
private bool _HasSingleValue(MyEnum value)
{
// ???
}
해결책
당신은 그것을 캐스팅 할 수 있습니다 int
그리고 기술을 사용하십시오 비트 twiddling 핵 그것이 두 가지의 힘인지 확인합니다.
int v = (int)enumValue;
return v != 0 && (v & (v - 1)) == 0;
다른 팁
조합을 사용할 수 있습니다 IsDefined
그리고 2의 힘을 확인합니다.
당신은 당신이 열거하고 getValues를하고 2의 힘 인 항목 만 계산할 수 있습니다 (나머지가없는 2로 균등하게 나눌 수 있음).
제휴하지 않습니다 StackOverflow