문제

내가있는 경우 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)
{
    // ???
}



관련된: stackoverflow : enum. 결합 플래그에 정의되었습니다

도움이 되었습니까?

해결책

당신은 그것을 캐스팅 할 수 있습니다 int 그리고 기술을 사용하십시오 비트 twiddling 핵 그것이 두 가지의 힘인지 확인합니다.

int v = (int)enumValue;
return v != 0 && (v & (v - 1)) == 0;

다른 팁

조합을 사용할 수 있습니다 IsDefined 그리고 2의 힘을 확인합니다.

당신은 당신이 열거하고 getValues를하고 2의 힘 인 항목 만 계산할 수 있습니다 (나머지가없는 2로 균등하게 나눌 수 있음).

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top