[FlagsAttribute]
public enum Colors { Red = 1, Green = 2, Blue = 4, Yellow = 8 };
我有一个枚举作为节目。我希望能够得到说Color.Blue在索引2,索引从0开始。我想得到颜色传递的索引号。什么?有人可以给我发一些片段......
答案 0 :(得分:11)
试试这个:
int index = Array.IndexOf(Enum.GetValues(typeof(Colors )), Colors.Green);
答案 1 :(得分:3)
假设每种颜色使用一个位作为值,您只需找到该位的索引。
public int GetIndex(Colors color) {
int value = (int)colors;
int index = 0;
while (value > 0) {
value >>= 1;
index++;
}
return index;
}
请注意,位索引通常为零,但是在这里你得到一个基于索引的。
如果你想要一个基于零的索引,你会得到蓝色的索引2,而不是你在问题中所说的三个。如果这是您想要的结果,请从index = -1;
开始。
答案 2 :(得分:2)
无法真正理解你的问题,但这就是你的意思:
var blue = (Colors)Enum.GetValues(typeof(Colors))[2];
答案 3 :(得分:1)
我不知道你为什么需要它,但一种方法是
Colors c = (Colors)Enum.Parse(typeof(Colors), Enum.GetNames(typeof(Colors))[index]);
答案 4 :(得分:0)
这是我找到的最简单的解决方案。使用带有字节操作的标志可以正常工作。
Array eVals = Enum.GetValues(typeof(MyEnum));
MyEnum eVal = (MyEnum)eVals.GetValue(iIndex);
答案 5 :(得分:0)
这样做之后,我就这样做了:
return (Status)Enum.GetValues(typeof(Status)).GetValue(this.EvaluationStatusId);
答案 6 :(得分:0)
我正在使用以下代码,它正在运行:
int index=(int)Enum.Parse(typeof(Colors), "Green");