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) –