2009-09-15 3 views
2
[FlagsAttribute] 
public enum Colors { Red = 1, Green = 2, Blue = 4, Yellow = 8 }; 

나는 열거 형을 가지고 있습니다. Colors라고하는 능력을 원해. Blue는 Index 2에 있고, Index는 0부터 응시합니다. Colors에서 넘겨주는 색인 번호를 얻고 싶습니다. 뭐라 구요? 누군가가값에 의한 열거 형 인덱스

답변

3

각 색상 값으로 단일 비트를 사용한다고 가정하면, 당신은 찾을 수 있습니다 그 비트의 인덱스

public int GetIndex(Colors color) { 
    int value = (int)colors; 
    int index = 0; 
    while (value > 0) { 
     value >>= 1; 
     index++; 
    } 
    return index; 
} 

비트 인덱스는 일반적으로 0부터 시작하지만 여기에서는 하나의 인덱스를 사용합니다.

0부터 시작하는 색인을 원할 경우 질문에 언급 된 것처럼 3 개가 아닌 파란색으로 2 개의 색인이 생성됩니다. 그 결과가 원하는 경우 index = -1;으로 시작하십시오. 당신이 그것을 필요로하는 이유

int index = Array.IndexOf(Enum.GetValues(typeof(Colors)), Colors.Green); 
+0

유감스럽게도 이제는 2로 변경했습니다. – chugh97

2

정말 당신의 질문을 이해 할 수 없습니다 ... 좀 조각을 게시,하지만입니다 수있는이 무슨 뜻인지 :

var blue = (Colors)Enum.GetValues(typeof(Colors))[2]; 
+1

당신이 인덱스를 적용 할 수 없습니다 얻을 것이다 [ ] 형식의 'System.Array'식;) –

11

이 하나 봅니다. 바이트 작업으로 괴롭히지 않는 플래그로 잘 작동합니다. 나는 다음과 같은 코드를 사용하고

return (Status)Enum.GetValues(typeof(Status)).GetValue(this.EvaluationStatusId); 
1

나도 몰라,하지만 한 가지 방법이 내가 볼 수있는 가장 쉬운 솔루션입니다

Colors c = (Colors)Enum.Parse(typeof(Colors), Enum.GetNames(typeof(Colors))[index]); 
0

나는이 이런 식으로 일을 한 후 작업을 얻었다

int index=(int)Enum.Parse(typeof(Colors), "Green"); 
0

, 그리고이 작동 :

Array eVals = Enum.GetValues(typeof(MyEnum)); 
MyEnum eVal = (MyEnum)eVals.GetValue(iIndex);