【发布时间】:2011-11-28 13:49:54
【问题描述】:
for (int i = (int)MY_ENUM.First; i <= (int)MY_ENUM.Last; i++)
{
//do work
}
有没有更优雅的方法来做到这一点?
【问题讨论】:
-
您的代码仅适用于由整数支持的枚举,其中范围是连续的。
for (int i = (int)MY_ENUM.First; i <= (int)MY_ENUM.Last; i++)
{
//do work
}
有没有更优雅的方法来做到这一点?
【问题讨论】:
您应该能够使用以下内容:
foreach (MY_ENUM enumValue in Enum.GetValues(typeof(MY_ENUM)))
{
// Do work.
}
【讨论】:
枚举有点像整数,但你不能依赖它们的值总是顺序的或升序的。您可以将整数值分配给枚举值,这会破坏您的简单 for 循环:
public class Program
{
enum MyEnum
{
First = 10,
Middle,
Last = 1
}
public static void Main(string[] args)
{
for (int i = (int)MyEnum.First; i <= (int)MyEnum.Last; i++)
{
Console.WriteLine(i); // will never happen
}
Console.ReadLine();
}
}
正如其他人所说,Enum.GetValues 是要走的路。
【讨论】:
foreach (var value in Enum.GetValues(typeof(MY_ENUM))) { ... }
【讨论】:
public static Array GetValues(Type enumType) 方法返回一个包含 anEnum 枚举值的数组。由于数组实现了 IEnumerable 接口,因此可以枚举它们。
例如:
EnumName[] values = (EnumName[])Enum.GetValues(typeof(EnumName));
foreach (EnumName n in values)
Console.WriteLine(n);
你可以在MSDN看到更详细的解释。
【讨论】: