如何在C#中获取枚举索引值

Sha*_*fiz 47 c c# enums integer

在C中enums,内部等于整数.因此我们也可以将数据类型enum视为整数.

如何用C#实现同样的目标?

Iai*_*ard 84

简单地把它投到一个int,如下所示:

int eValue = (int)enumValue;
Run Code Online (Sandbox Code Playgroud)

这是另一个示例,向您展示如何设置其内部整数值:

public enum MyEnum
{
    MyValue1 = 1,
    MyValue2 = 2
}

(int)MyEnum.MyValue2 == 2; // True
Run Code Online (Sandbox Code Playgroud)


use*_*167 37

将Enum-Type转换为int的另一种方法:

enum E
{
    A = 1,   /* index 0 */
    B = 2,   /* index 1 */
    C = 4,   /* index 2 */
    D = 4    /* index 3, duplicate use of 4 */
}

void Main()
{
    E e = E.C;
    int index = Array.IndexOf(Enum.GetValues(e.GetType()), e);
    // index is 2

    E f = (E)(Enum.GetValues(e.GetType())).GetValue(index);
    // f is  E.C
}
Run Code Online (Sandbox Code Playgroud)

更复杂但独立于分配给枚举值的INT值.

  • 这是一个比接受的答案(或许多其他类似的答案)更好的答案,因为他们似乎都假设您的枚举值被赋予顺序数值,而且往往不是这种情况. (3认同)
  • 使用标志时要小心,索引是通过标志的数字排序值计算的,而不是它们定义的顺序。在上面的示例中,如果您定义 A=1,C=4, B=2,则 B 的索引仍然为 1,即使它是在 C 之后定义的。使用复合标志时,这可能会导致意外结果。同样,在上面的示例中,如果我们添加一个新标志“AB = A | B”,则其值将为 3,并且 C 的索引将从上例中的 2 更改为 3,因为“AB”位于 B 和 C 之间按索引顺序。 (3认同)

Hom*_*mam 10

默认情况下,枚举中每个元素的基础类型是整数.

enum Values
{
   A,
   B,
   C
}
Run Code Online (Sandbox Code Playgroud)

您还可以为每个项目指定自定义值:

enum Values
{
   A = 10,
   B = 11,
   C = 12
}
int x = (int)Values.A; // x will be 10;
Run Code Online (Sandbox Code Playgroud)

注意:默认情况下,第一个枚举数的值为0.


Dur*_*dey 6

您可以直接投射它:

enum MyMonthEnum { January = 1, February, March, April, May, June, July, August, September, October, November, December };

public static string GetMyMonthName(int MonthIndex)
{
  MyMonthEnum MonthName = (MyMonthEnum)MonthIndex;
  return MonthName.ToString();
}
Run Code Online (Sandbox Code Playgroud)

例如:

string MySelectedMonthName=GetMyMonthName(8);
 //then MySelectedMonthName value will be August.
Run Code Online (Sandbox Code Playgroud)