枚举索引值

时间:2009-09-15 10:56:28

标签: c# enums

 [FlagsAttribute]
public enum Colors { Red = 1, Green = 2, Blue = 4, Yellow = 8 };

我有一个枚举作为节目。我希望能够得到说Color.Blue在索引2,索引从0开始。我想得到颜色传递的索引号。什么?有人可以给我发一些片段......

7 个答案:

答案 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");