2011-09-20 118 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

请不要将此标记为接受的答案。我只是想分享别人可能会觉得有用的替代解决方案。 –