是否可以使用索引整數來獲得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 –