クライアントから、各 int 値が Enum DayOfWeek の enum int 値である List を取得します。
リストには、タイム プランナーに表示される int 値 (日) のみが含まれます。
0,1,2 (日曜、月曜、火曜) などの int 値のリストを取得すると、これらの値を DayOfWeek 列挙型にどのように書き込めば、7 日間すべてまたは 1 日も機能しない一般的な方法になりますか?
土曜日のインデックスは 6 ですが、DayOfWeek 列挙型の値は 32 です。
[Flags]
public enum DayOfWeek
{
Sunday = 0,
Monday = 1,
Tuesday = 2,
Wednesday = 4,
Thursday = 8,
Friday = 16,
Saturday = 32,
NotSet = 64,
}
アップデート
これは、私のニーズに合わせて変更された MarcinJuraszek の実用的なソリューション コードです。
var visibleWeekDays = new List<int>();
for (int i = 0; i <= 6; i++)
{
visibleWeekDays.Add(i);
}
int allBitValues = visibleWeekDays.Select(i => (int)Math.Pow(2, ((i + 6) % 7))).Aggregate((e, i) => e | i);
AllVisibleDays = (VisibleDayOfWeek) allBitValues;
[Flags]
public enum VisibleDayOfWeek
{
None = 0,
Mon = 1,
Tue = 2,
Wed = 4,
Thu = 8,
Fri = 16,
Sat = 32,
Sun = 64
}
public VisibleDayOfWeek AllVisibleDays { get; set; }
上記のコードは、1 週間のすべての曜日を VisibleDayOfWeek 列挙型に書き込み、データベース フィールドに簡単に保存できるようになりました。
Microsoft MSDN によると、フラグ列挙型の None 値が再び 0 に設定され、残りの値は 2 の累乗になります。