内容简介:代码日志版权声明:翻译自:http://stackoverflow.com/questions/7010768/iterating-on-enum-type
Possible Duplicate:
07000
我不知道是否可以做我想要做的事,但我想为什么不这样做.
我有例子枚举:
public enum Animals {
Cat,
Dog,
...
}
我想做的是重复这个枚举.我想要这样工作:
foreach( var type in Animals ) {
Console.WriteLine( type.toString() );
}
输出将为:
Cat Dog
可能吗?我不想把每个项目放到一个数组中,然后迭代,我想直接在这个枚举上迭代.
编辑:请注意,在这个答案中,我将动物重命名为动物.根据.NET约定,只有基于标志的枚举应该有一个复数名称.
您可以使用
Enum.GetValues()
:
foreach (var type in (Animal[]) Enum.GetValues(typeof(Animal)) {
Console.WriteLine(type.toString());
}
如Dan的评论所述,如果您在foreach循环中使用显式输入,则不需要转换:
foreach (Animal type in Enum.GetValues(typeof(Animal)) {
Console.WriteLine(type.toString());
}
但是现在你不能尽早发现错误.例如:
foreach (Animal type in Enum.GetValues(typeof(SomeEmptyEnum)) {
Console.WriteLine(type.toString());
}
SomeEmptyEnum是(显然)一个空的枚举类型.这里GetValues将返回一个空的数组类型为SomeEmptyEnum [].上面的代码只会检查返回的数组的每个成员是否是正确的类型,所以你不会发现问题.显然,这不可能在现实生活中发生,但它显示了代码的味道,这导致我改变结果 – 基本上我更喜欢处理强类型的集合.
或者,对于更加类似安全的方法,您可以使用我的 Unconstrained Melody 库:
foreach (var type in Enums.GetValues<Animal>()) {
Console.WriteLine(type.ToString());
}
这里,我的Enums.GetValues<T>()返回一个IList<T>,这意味着:
>没有必要投下
>它实际上返回一个不可变的列表,所以它不需要每次创建一个新的集合,不同于标准的Enum.GetValues()
它也有一个通用约束强制T是一个枚举类型,所以你不能不小心用非枚举类型调用它,不同于Enum.GetValues()…
代码日志版权声明:
翻译自:http://stackoverflow.com/questions/7010768/iterating-on-enum-type
以上所述就是小编给大家介绍的《c# – 循环枚举类型》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- c# – 枚举时项目发生变化时是否会影响枚举?
- 测者的测试技术手册:Junit单元测试遇见的一个枚举类型的坑(枚举类型详解)
- 测者的JUnit单元测试探坑记:Junit单元测试遇见的一个枚举类型的坑(枚举类型详解)
- Python 的枚举类型
- 枚举的使用示例
- mybatis处理枚举类
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Release It!
Michael T. Nygard / Pragmatic Bookshelf / 2007-03-30 / USD 34.95
“Feature complete” is not the same as “production ready.” Whether it’s in Java, .NET, or Ruby on Rails, getting your application ready to ship is only half the battle. Did you design your system to......一起来看看 《Release It!》 这本书的介绍吧!