iterating on enum type
Possible Duplicate:
How do I enumerate an enum?
I don't know if it is possible to do what I want to do, but I think why not.
I have example enum:
public enum Animals {
Cat,
Dog,
...
}
What I want to do is to iterate on this enum. I want it work like that:
foreach( var type in Animals ) {
Console.WriteLine( type.toString() );
}
and the output will be:
Cat
Dog
Is it possible? I don't want to put every item to an array, and then iterate, I want to iterate directly on this enum.
EDIT: Note that throughout this answer I've renamed Animals
to Animal
. According to .NET conventions, only flags-based enums should have a plural name.
You can use Enum.GetValues()
:
foreach (var type in (Animal[]) Enum.GetValues(typeof(Animal)) {
Console.WriteLine(type.toString());
}
As noted in Dan's comment, if you use explicit typing in your foreach
loop, you don't need to cast:
foreach (Animal type in Enum.GetValues(typeof(Animal)) {
Console.WriteLine(type.toString());
}
But now you won't spot errors as early as you could. For example:
foreach (Animal type in Enum.GetValues(typeof(SomeEmptyEnum)) {
Console.WriteLine(type.toString());
}
Where SomeEmptyEnum
is (obviously) an empty enum type. Here GetValues
will return an empty array of type SomeEmptyEnum[]
. The code above will only check that each member of the returned array is of the right type, so you won't spot the problem. Obviously this is unlikely to happen in real life, but it demonstrates the sort of code smell which leads me to cast the result instead - basically I far prefer dealing with strongly-typed collections.
Alternatively, for a somewhat more typesafe approach, you can use my Unconstrained Melody library:
foreach (var type in Enums.GetValues<Animal>()) {
Console.WriteLine(type.ToString());
}
Here my Enums.GetValues<T>()
returns an IList<T>
, which means:
Enum.GetValues()
It's also got a generic constraint forcing T
to be an enum type, so you can't accidentally call it with a non-enum type, unlike Enum.GetValues()
...
Enum.GetValues是你的朋友。
Use Enum.GetNames() to loop through the names of the members of your enumeration. Use Enum.GetValues() to loop through the values.
链接地址: http://www.djcxy.com/p/16284.html上一篇: 如何找出枚举的所有可能的值?
下一篇: 迭代枚举类型