iterating on enum type
Possible Duplicate:
How do I enumerate an enum?
我不知道是否可以做我想做的事,但我想为什么不行。
我有示例枚举:
1 2 3 4 5 | public enum Animals { Cat, Dog, ... } |
我要做的是迭代这个枚举。我希望它能像那样工作:
1 2 3 | foreach( var type in Animals ) { Console.WriteLine( type.toString() ); } |
输出为:
1 2 | Cat Dog |
有可能吗?我不想把每个项都放到数组中,然后迭代,我想直接迭代这个枚举。
编辑:请注意,在这个答案中,我将
您可以使用
1 2 3 | foreach (var type in (Animal[]) Enum.GetValues(typeof(Animal)) { Console.WriteLine(type.toString()); } |
如丹的评论中所述,如果在
1 2 3 |
但现在你不会尽早发现错误。例如:
1 2 3 | foreach (Animal type in Enum.GetValues(typeof(SomeEmptyEnum)) { Console.WriteLine(type.toString()); } |
其中
或者,对于更安全的类型方法,您可以使用我的无约束旋律库:
1 2 3 | foreach (var type in Enums.GetValues<Animal>()) { Console.WriteLine(type.ToString()); } |
在这里,我的
- 不需要铸造
- 它实际上返回一个不变的列表,因此不需要每次都创建一个新的集合,这与标准的
Enum.GetValues() 不同。
它还具有一个强制
试试这个:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | enum animals { cat, dog, fish } private void Form1_Load(object sender, EventArgs e) { foreach (string myAnimal in Enum.GetNames(typeof(animals))) { Debug.WriteLine(myAnimal); } } |
您必须遍历enum.getNames(typeof(yourenum))。
祝你好运。
要在jon的答案中保存一些键入内容,请显式指定类型,您不必强制转换:
1 2 3 |
然而,正如乔恩所解释的那样,这也需要额外的谨慎。
还要注意,C枚举名称通常应为单数形式(
使用enum.getNames()循环枚举成员的名称。使用enum.getValues()循环遍历这些值。
enum.getValues是您的朋友。