簡體   English   中英

枚舉列表上的按位邏輯運算符

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM