按顺序寻址自定义枚举值

时间:2014-05-18 13:16:53

标签: c# .net enums

通常我可以通过它的有序位置(0,1,2,3 ......)来解决枚举中的每个项目,但是如果我已经创建了带有自定义值的枚举(如下所示) ,还有一种方法可以通过其声明的顺序来处理每个项目(例如,Off = 0,_5m = 1,_15m = 2等),而不是它的值?

enum WaitTime { Off = 0, _5m = 5, _15m = 15, _30m = 30, _1h = 60, _2h = 120, _3h = 180, _6h = 360, _12h = 720, _1d = 1440, _2d = 2880 }

3 个答案:

答案 0 :(得分:2)

C#中,您可以使用Enum.GetValues()方法。

  

它检索指定的常量值的数组   列举。数组的元素按二进制值排序   枚举常量。

Array enumElementsInArray = Enum.GetValues(typeof(WaitTime));

int firstElement = enumElementsInArray[0];
int secondElement = enumElementsInArray[1];

但是要知道,它会在按照值排序元素后返回aray 。但是,当然,对于你的枚举,它将按你的意愿工作。

答案 1 :(得分:1)

这是一种适用于所有类型枚举的通用方法:

public static T GetValueAt<T>(int idx)
{
  var vals = Enum.GetValues(typeof(T));
  return (T)vals.GetValue(idx);
}

用法:

var value = GetValueAt<WaitTime>(2); //returns _15m

答案 2 :(得分:0)

(答案为C#)

不,你不会,例如_5m转换为5,而不是1。

你所谓的“顺序”是一个隐式转换为整数(默认情况下为0 ... N-1表示具有N值的枚举)

enum WaitTime { Off = 0, _5m = 5, _15m = 15, _30m = 30, _1h = 60, _2h = 120, _3h = 180, _6h = 360, _12h = 720, _1d = 1440, _2d = 2880 }

class Program
{
    static void Main()
    {
        WaitTime wt = WaitTime._15m;
        Console.WriteLine((int)wt);
    }
}

将输出15。

PS:在声明枚举值时避免使用下划线。