通常我可以通过它的有序位置(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 }
答案 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:在声明枚举值时避免使用下划线。