gpt4 book ai didi

c# - 将多个列表枚举值写入另一个枚举

转载 作者:行者123 更新时间:2023-11-30 20:59:10 25 4
gpt4 key购买 nike

我从客户端得到一个列表,其中每个 int 值都是枚举 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 的幂。

最佳答案

var input = new List<int>() { 0, 1, 2 };

var output = input.Select(i => (DayOfWeek)Math.Pow(2, ((i + 6) % 7))).ToList();

那个奇怪的 ((i + 6) % 7) 是必要的,因为标准的 DayOfWeek 从星期日开始,而你的 64 作为周日的值(value)。

您还可以使用 LINQ 将标志聚合为单个 int 值:

var x = output.Select(i => (int)i).Aggregate((e, i) => e | i);

更新

对于更改的标志,您必须更改翻译查询:

var output = input.Select(i => (DayOfWeek)Math.Pow(2, (i - 1) % 7)).ToList();

关于c# - 将多个列表枚举值写入另一个枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15580805/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com