从客户端我得到一个列表,其中每个 int 值是 Enum DayOfWeek 的枚举 int 值。
该列表仅包含那些在时间计划器中可见的 int 值(天)。
获取 int 值列表,例如 0、1、2(星期日、星期一、星期二),您将如何以一般方式将这些值写入 DayOfWeek 枚举,适用于所有 7 天或没有一天?
只知道星期六的索引为 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; }
上面的代码将一周中的所有日子写入 VisibleDayOfWeek 枚举,现在可以轻松地将其保存在数据库字段中。
根据 Microsoft MSDN,标志枚举的 None 值现在再次设置为 0,其余值是 2 的幂。