[英]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.