2011-09-20 164 views
3

是否可以使用索引整數來獲得enum值?例如,如果......C#枚舉索引問題

public enum Days { Mon, Tues, Wed, ..., Sun}; 

...是它在某種程度上可以編寫類似...

Days currentDay = Days[index]; 

謝謝!

+0

順便說一句,.NET已經在'System'命名空間中的'DayOfWeek'枚舉:HTTP:// MSDN。 microsoft.com/en-us/library/system.dayofweek.aspx –

回答

6

沒有,但你可以施放intenum,如果您使用的是值在enum定義,但是你這樣做你自己的風險:

Days currentDay = (Days)index; 

如果你真的想成爲安全,你可以檢查它是否被首先定義,但會涉及一些拳擊等,並會影響性能。

// checks to see if a const exists with the given value. 
if (Enum.IsDefined(typeof(Days), index)) 
{ 
    currentDay = (Days)index; 
} 

如果你知道你的枚舉是指定的,連續的值範圍(即星期一= 0直通太陽= 6),你可以比較:

if (index >= (int)Days.Mon && index <= (int)Days.Sun) 
{ 
    currentDay = (Days) index; 
} 

您還可以使用數組傳遞回來Enum.GetValues() ,但再次,這是比演員更重:

Day = (Day)Enum.GetValues(typeof(Day))[index]; 
+0

謝謝詹姆斯。選項#3! :) – john

0

如果索引你的枚舉正確,你可以區分的INT(或其他指數),以枚舉。

所以......

public enum Days { Mon = 0, Tue, Wed .... } 

Days today = (Days)1;  
0

我以前做的一些計算與DaysOfWeek枚舉。我使用了擴展方法來創建一個安全的默認值。

下面是一個例子:

public enum Days { Invalid = ~0, Mon, Tues, Wed, Thurs, Fri, Sat, Sun }; 
class Program 
{ 
    static void Main(string[] args) 
    { 
     int day = 8; 
     Days day8 = (Days)day; 
     Console.WriteLine("The eighth day is {0}", day8); 

     Console.WriteLine("Days contains {0}: {1}", 
      day, Enum.IsDefined(typeof(Days), day)); 

     Console.WriteLine("Invalid day if {0} doesn't exist: {1}", 
      day, day8.OrDefault(Days.Invalid)); 

     Console.WriteLine("Sunday day if {0} doesn't exist: {1}", 
      day, day8.OrDefault(Days.Sun)); 

     Days day9 = ((Days)9).OrDefault(Days.Wed); 
     Console.WriteLine("Day (9) defaulted: {1}", 9, day9); 

     Console.ReadLine(); 
    } 
} 
public static class DaysExtensions 
{ 
    public static Days OrDefault(this Days d, Days defaultDay) 
    { 
     if (Enum.IsDefined(typeof(Days), (Days)d)) 
     { 
      return d; 
     } 

     return defaultDay; 
    } 
} 

和輸出:

The eighth day is 8 
Days contains 8: False 
Invalid day if 8 doesn't exist: Invalid 
Sunday day if 8 doesn't exist: Sun 
Day (9) defaulted: Wed 
+0

請不要將此標記爲接受的答案。我只是想分享別人可能會覺得有用的替代解決方案。 –