繁体   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