[英]List of Enums C#
我正在使用需要在一周中設置幾天列表的api,這些天有一個枚舉,但是我不能使用列表。 該參數期望像這樣的RecurringDay.Monday | 循環日星期三
我似乎找不到一種方法,可以用我當日擁有的值來構建它,而不必以一種看起來非常糟糕的編碼方式進行。 如何構建用戶選擇的日期列表,如RecurringDay.Monday | RecurringDay.Wednesday | RecurringDay.Friday
[Flags]
public enum RecurringDay
{
RecurringNone = 0,
RecurringSunday = 1,
RecurringSaturday = 2,
RecurringWeekend = 3,
RecurringFriday = 4,
RecurringThursday = 8,
RecurringWednesday = 16,
RecurringTuesday = 32,
RecurringMonday = 64,
RecurringWeekdays = 124,
RecurringAlldays = 127
}
schedule.LocalTime = new HueDateTime()
{
DateTime = DateTime.Now.AddMinutes(1),
RecurringDay = RecurringDay.RecurringMonday | RecurringDay.RecurringAlldays
};
標志枚舉是位向量。 每個枚舉值對應於基礎整數中的一位。 設置位的組合表示值的組合。 為此,每個值都必須是2的冪,即正好設置了位。 但是位的組合也可能具有名稱,例如上例中的RecurringWeekend
。
例:
0b00010001 = 0x11 = 17
1 Sunday included
0 Saturday not included
0 Friday not included
0 Thursday not included
1 Wednesday included
0 Tuesday not included
0 Monday not included
要建立這樣的組合,只需使用| =運算符:
RecurringDay days = RecurringDay.RecurringNone;
if (user_selected_Sunday)
days |= RecurringDay.RecurringSunday;
if (user_selected_Saturday)
days |= RecurringDay.RecurringSaturday;
...
if (user_selected_Monday)
days |= RecurringDay.RecurringMonday;
最后day
將包含與用戶選擇匹配的適當天數組合。
其實一個標志枚舉值的每個實例都已經是一組值這當然也可能是空的,即RecurringDay.RecurringNone
。 無需在此處使用List<>
。
我不確定您的問題是什么,但是這段代碼對我來說看起來不錯。 首先,我擺脫了您重復出現的“重復出現”,並使組合更清晰(如@Heretic Monkey建議):
[Flags]
public enum RecurringDay
{
None = 0,
Sunday = 1,
Saturday = 2,
Friday = 4,
Thursday = 8,
Wednesday = 16,
Tuesday = 32,
Monday = 64,
Weekends = Saturday | Sunday,
Weekdays = Monday | Tuesday | Wednesday | Thursday | Friday,
Alldays = Weekdays | Weekends,
}
然后,我使用不是類型名稱的屬性名稱(為清楚起見)重新創建了HueDateTime類:
public class HueDateTime
{
public DateTime When { get; set; }
public RecurringDay HowOften { get; set; }
}
然后我使用了代碼:
var schedule = new HueDateTime()
{
When = DateTime.Now + TimeSpan.FromHours(1),
HowOften = RecurringDay.Monday | RecurringDay.Wednesday
};
var succeeded = Enum.TryParse<RecurringDay>("Sunday,Monday,Tuesday", out var when);
當這最后語句執行完畢, succeeded
是true
和when
的類型是RecurringDay
具有的價值Sunday | Tuesday | Monday
Sunday | Tuesday | Monday
Sunday | Tuesday | Monday
。 我非常確定此代碼可以輕松地通過挑剔的代碼審閱者。
我剛剛注意到,您的日子倒退了(星期日,星期六,星期二,星期一)-出於某些原因? 這就是為什么when
Sunday | Tuesday | Monday
結束的原因Sunday | Tuesday | Monday
Sunday | Tuesday | Monday
Sunday | Tuesday | Monday
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.