[FlagsAttribute]
public enum Colors { Red = 1, Green = 2, Blue = 4, Yellow = 8 };
나는 열거 형을 가지고 있습니다. Colors라고하는 능력을 원해. Blue는 Index 2에 있고, Index는 0부터 응시합니다. Colors에서 넘겨주는 색인 번호를 얻고 싶습니다. 뭐라 구요? 누군가가값에 의한 열거 형 인덱스
[FlagsAttribute]
public enum Colors { Red = 1, Green = 2, Blue = 4, Yellow = 8 };
나는 열거 형을 가지고 있습니다. Colors라고하는 능력을 원해. Blue는 Index 2에 있고, Index는 0부터 응시합니다. Colors에서 넘겨주는 색인 번호를 얻고 싶습니다. 뭐라 구요? 누군가가값에 의한 열거 형 인덱스
각 색상 값으로 단일 비트를 사용한다고 가정하면, 당신은 찾을 수 있습니다 그 비트의 인덱스
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);
정말 당신의 질문을 이해 할 수 없습니다 ... 좀 조각을 게시,하지만입니다 수있는이 무슨 뜻인지 :
var blue = (Colors)Enum.GetValues(typeof(Colors))[2];
당신이 인덱스를 적용 할 수 없습니다 얻을 것이다 [ ] 형식의 'System.Array'식;) –
이 하나 봅니다. 바이트 작업으로 괴롭히지 않는 플래그로 잘 작동합니다. 나는 다음과 같은 코드를 사용하고
return (Status)Enum.GetValues(typeof(Status)).GetValue(this.EvaluationStatusId);
나도 몰라,하지만 한 가지 방법이 내가 볼 수있는 가장 쉬운 솔루션입니다
Colors c = (Colors)Enum.Parse(typeof(Colors), Enum.GetNames(typeof(Colors))[index]);
입니다 :
나는이 이런 식으로 일을 한 후 작업을 얻었다
int index=(int)Enum.Parse(typeof(Colors), "Green");
, 그리고이 작동 :
Array eVals = Enum.GetValues(typeof(MyEnum));
MyEnum eVal = (MyEnum)eVals.GetValue(iIndex);
유감스럽게도 이제는 2로 변경했습니다. – chugh97