Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何通过代码动态传递DaysOfTheWeek枚举值_C#_.net_Enums - Fatal编程技术网

C# 如何通过代码动态传递DaysOfTheWeek枚举值

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

我在task scheduler类中有下面的枚举值,当我创建任务时,我需要根据复选框的选择添加一周中的天数。如果选中了“星期一”复选框,则我只需要通过星期一(如果还选中了其他复选框,则有时需要多天)

在下面的代码中,我如何动态地度过这几天

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
}

每周的
天的类型是什么?如果是
短的
,它应该像你做的那样工作。但我不想以这种方式通过。我想通过循环取决于选中的复选框使用
开关盒
,如果选择了天,则选择其值