for (int i = (int)MY_ENUM.First; i <= (int)MY_ENUM.Last; i++)
{
//do work
}
有没有更优雅的方式来做到这一点?你可以循环访问C#中的枚举吗?
for (int i = (int)MY_ENUM.First; i <= (int)MY_ENUM.Last; i++)
{
//do work
}
有没有更优雅的方式来做到这一点?你可以循环访问C#中的枚举吗?
你应该能够利用以下内容:
foreach (MY_ENUM enumValue in Enum.GetValues(typeof(MY_ENUM)))
{
// Do work.
}
在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看到更详细的解释。
枚举类似于整数,但不能依赖它们的值始终是顺序或升序。您可以将整数值指派给枚举会破坏你的简单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
是反潜的方式。
您的代码仅适用于由范围连续的ints支持的枚举。 –
[C#遍历枚举的可能重复? (Indexing a System.Array)](http://stackoverflow.com/questions/482729/c-sharp-iterating-through-an-enum-indexing-a-system-array) –