C# 如何通过代码动态传递DaysOfTheWeek枚举值
我在task scheduler类中有下面的枚举值,当我创建任务时,我需要根据复选框的选择添加一周中的天数。如果选中了“星期一”复选框,则我只需要通过星期一(如果还选中了其他复选框,则有时需要多天) 在下面的代码中,我如何动态地度过这几天C# 如何通过代码动态传递DaysOfTheWeek枚举值,c#,.net,enums,C#,.net,Enums,我在task scheduler类中有下面的枚举值,当我创建任务时,我需要根据复选框的选择添加一周中的天数。如果选中了“星期一”复选框,则我只需要通过星期一(如果还选中了其他复选框,则有时需要多天) 在下面的代码中,我如何动态地度过这几天 public enum DaysOfTheWeek: short { Sunday = 1, Monday = 2, Tuesday = 4, Wednesday = 8, Thursday = 16, Frid
public enum DaysOfTheWeek: short
{
Sunday = 1,
Monday = 2,
Tuesday = 4,
Wednesday = 8,
Thursday = 16,
Friday = 32,
Saturday = 64,
AllDays = 127
}
DaysOfWeek = DaysOfTheWeek.Monday | DaysOfTheWeek.Sunday;
你的问题没有提到循环,但你对我的评论的回答提到了循环。你是说:
DaysOfWeek = DaysOfTheWeek.Monday | DaysOfTheWeek.Sunday;
foreach (int day in Enum.GetValues(typeof(DaysOfTheWeek)))
{
if ( day & DaysOfWeek ) {
/* do something for this day */
}
}
您可以像这样循环选择列表并创建枚举值:
var days = new[] {1, 4, 32};
var daysOfTheWeek = DaysOfTheWeek.None;
foreach (var day in days)
{
daysOfTheWeek = daysOfTheWeek | (DaysOfTheWeek) day;
}
[Flags]
public enum DaysOfTheWeek
{
None = 0,
Sunday = 1,
Monday = 2,
Tuesday = 4,
Wednesday = 8,
Thursday = 16,
Friday = 32,
Saturday = 64,
AllDays = 128
}
使用
标志
属性装饰枚举:
[Flags]
public enum DaysOfTheWeek : short
声明一个DaysOfTheWeek
变量并将其初始化为零:
DaysOfTheWeek days = 0;
为勾选的每一天的枚举值添加标志。替换bool sunday=true,周三=true代码>此处包含检查复选框的代码:
bool sunday = true, wednesday = true; // this is just proof of concept
if (sunday)
days |= DaysOfTheWeek.Sunday;
if (wednesday)
days |= DaysOfTheWeek.Wednesday;
天数
输出:
星期日、星期三
正如Shahriar Gholami所建议的,完整代码如下:
class Program
{
static void Main(string[] args)
{
var daysOfWeek = GetDaysOfTheWeek(new List<DaysOfTheWeek> {DaysOfTheWeek.Monday, DaysOfTheWeek.Sunday});
Console.WriteLine(daysOfWeek); //3
}
public static DaysOfTheWeek GetDaysOfTheWeek(List<DaysOfTheWeek> selectedDays)
{
var daysOfTheWeek = DaysOfTheWeek.None;
foreach (var day in selectedDays)
{
daysOfTheWeek = daysOfTheWeek | day;
}
return daysOfTheWeek;
}
}
[Flags]
public enum DaysOfTheWeek : short
{
None = 0,
Sunday = 1,
Monday = 2,
Tuesday = 4,
Wednesday = 8,
Thursday = 16,
Friday = 32,
Saturday = 64,
AllDays = 127
}
类程序
{
静态void Main(字符串[]参数)
{
var daysOfWeek=GetDaysOfTheWeek(新列表{DaysOfTheWeek.Monday,DaysOfTheWeek.Sunday});
Console.WriteLine(daysOfWeek);//3
}
公共静态DaysOfTheWeek GetDaysOfTheWeek(列出所选日期)
{
var daysOfTheWeek=daysOfTheWeek.None;
foreach(选定日期中的var日)
{
daysOfTheWeek=daysOfTheWeek |天;
}
每周返回一天;
}
}
[旗帜]
公共枚举DaysOfTheWeek:短
{
无=0,
星期日=1,
星期一=2,
星期二=4,
星期三=8,
星期四=16,
星期五=32,
星期六=64,
所有天数=127
}
每周的天的类型是什么?如果是短的
,它应该像你做的那样工作。但我不想以这种方式通过。我想通过循环取决于选中的复选框使用开关盒
,如果选择了天,则选择其值