是否可以使用索引整数来获得enum
值?例如,如果......C#枚举索引问题
public enum Days { Mon, Tues, Wed, ..., Sun};
...是它在某种程度上可以编写类似...
Days currentDay = Days[index];
谢谢!
是否可以使用索引整数来获得enum
值?例如,如果......C#枚举索引问题
public enum Days { Mon, Tues, Wed, ..., Sun};
...是它在某种程度上可以编写类似...
Days currentDay = Days[index];
谢谢!
没有,但你可以施放int
到enum
,如果您使用的是值在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];
谢谢詹姆斯。选项#3! :) – john
如果索引你的枚举正确,你可以区分的INT(或其他指数),以枚举。
所以......
public enum Days { Mon = 0, Tue, Wed .... }
Days today = (Days)1;
我以前做的一些计算与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
请不要将此标记为接受的答案。我只是想分享别人可能会觉得有用的替代解决方案。 –
顺便说一句,.NET已经在'System'命名空间中的'DayOfWeek'枚举:HTTP:// MSDN。 microsoft.com/en-us/library/system.dayofweek.aspx –