Is it possible to iterate through each choice in an enum?
本问题已经有最佳答案,请猛点这里访问。
Possible Duplicate:
How to enumerate an enum?
所以我有一些这样的代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | enum Decision { DecisionA, DecisionB, ... } public void DoStuff(Decision d) { switch(d) { case Decision.DecisionA: .... ... } } |
基本上,无论决策是什么,
现在,我想为dostuff实现单元测试。通过拥有一个类似于
是否可以访问
1 2 3 4 | foreach(var d in Decision.Options) { //d will be DecisionA, and then DecisionB, etc etc } |
你可以使用
1 2 3 |
我更喜欢我在无约束旋律中提供的选项-一个提供枚举和委托扩展方法的小库:
1 2 3 | foreach (var decision in Enums.GetValues<Decision>()) { } |
这是:
- 返回类型中的类型安全(它返回一个
IList ) - 类型参数中的类型安全(类型必须是枚举)
- 更高效,因为它对所有调用重复使用相同的只读列表
当然,这意味着使用一个额外的库…对于您来说,单次调用可能不值得,但是如果您使用Enums做了很多事情,您可能会发现其他功能很有用。
可以使用System.Enum.GetValues。
乔恩的答案给了你枚举,这里还有一些随机的东西…
对于测试来说,最好换一种方式——确保值列表(
另一种看待它的方法是: