![](/img/trans.png)
[英]Is there a solution for a bitwise logical AND (&) operator between two Enum values in C#
[英]bitwise logical operator on enum list
我有一个枚举 WeekDays,顶部有 Flag 属性,
[Flags]
public enum WeekDays
{
None = 0,
Sunday = 1,
Monday = 2,
Tuesday = 4,
Wednesday = 8,
Thursday = 16,
Friday = 32,
Saturday = 64
}
我想将此枚举用作另一个 model 中的列表。我面临的问题是将枚举列表从 FE 映射到 map 到一个 int 变量以存储在数据库列中。 我不知道该怎么做。 到目前为止我在尝试什么:
int daysBit;
var settings = await _globalContext.settingsModel.SingleOrDefaultAsync(x => x.id == request.id);
if (adminEmailSettingsFromDb == null)
{
foreach (var day in request.DaysOfWeek)
{
daysBit |= (day)WeekDays;
}
var exampleVariable = new settingsModel
{
DaysOfWeek = daysBit,
CreatedAt = DateTime.UtcNow,
UpdatedAt = DateTime.UtcNow
};
}
您可以使用 Linq Aggregate 来制作单线:
var dayBit = request.DaysOfWeek.Aggregate(WeekDays.None, (a, b) => a|b);
反之:
public static IEnumerable<WeekDays> GetFlagList(WeekDays days)
{
var all = Enum.GetValues<WeekDays>();
foreach (var value in all)
{
if ((days & value) == value)
{
yield return value;
}
}
}
所以我所做的就是在上面的相同代码中解决这个问题
WeekDays daysBit=WeekDays.None;
foreach (var day in request.DaysOfWeek)
{
daysBit |= day;
}
刚刚更新了这两行。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.