How to create an array of enums
我有大约30个不同的标记枚举,我想将它们放入一个数组中,以便索引和快速访问。我还要说明,我没有一个具有30个值的枚举,但有30个具有不同值量的枚举。
目标是将它们添加到指定索引的数组中。通过这种方式,我可以编写一个函数,在该函数中,我可以将数组索引传递到中,以设置枚举的分离性值。
更新:下面是我想做的一个例子。
枚举主元枚举=0,枚举=1,enum n=n-1)-它具有与关联枚举的索引匹配的索引。
[旗帜]Enum1(值1=0,值2=1,值3=2,值4=4…)
[旗帜]枚举("")
[旗帜]枚举("")
因为我使用的是可标记的枚举,所以我有如下类
1 2 3 4 5 6 7 8 | public static class CEnumWorker { public static enum1 myEnum1 = enum1.value1; public static enum2 myEnum2 = enum2.value1; public static enumN myEnumN = enumN.value1; //I would then have functions that set the flags on the enums. I would like to access the enums through an array or other method so that I do not have to build a large switch statement to know which enum I am wanting to manipulate } |
由于有30种不同类型的枚举,因此无法为它们创建强类型数组。最好是一个System.Enum数组:
1 |
如果需要强类型的枚举值,则在从数组中拉出枚举时必须强制转换。
如果我理解正确,你必须:
1 2 3 |
但是您必须这样访问(不是强类型,而且容易引用错误的索引):
1 2 | if ((Enum1)enums[0] == Enum1.Value1) ... |
在.NET 4中,可以使用元组:
1 2 3 4 | var enums = new Tuple<Enum1, Enum2>(Enum1.Value1, Enum2.AnotherValue); if (enums.Item1 == Enum1.Value1) ... |
…但我不推荐这么多(30)个枚举,我认为甚至有8个左右的限制。您还可以创建自己的类:
1 2 3 4 5 6 7 8 9 10 11 12 | class Enums { public Enum1 Enum1 { get; set; } public Enum2 Enum2 { get; set; } } Enums enums = new Enums(); enums.Enum1 = Enum1.Value1; enums.Enum2 = Enum2.AnotherValue; if (enums.Enum1 == Enum1.Value1) ... |
我建议使用最后一种方法,因为您使用的是引用类型,您不依赖于索引位置,您可以给属性指定任何名称,并且它是强类型的。您唯一"失去"的是能够轻松地遍历列表,但如果确实需要,您可以通过反射来实现这一点。
枚举提供了两种将整数转换为枚举值的机制-getValues()方法和纯强制转换:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | enum EnumA { A1, A2, A1234 } enum EnumB { B00, B01, B02, B04 } class Program { static void Main(string[] args) { EnumA a = ((EnumA[])Enum.GetValues(typeof(EnumA)))[0]; Console.WriteLine(a); EnumB boa = (EnumB)3; Console.WriteLine(boa); } } |
如果可以使用这些机制之一从int中获取枚举,那么我不太确定为什么要创建自己的数组。
你可以一直使用好的旧的