我如何使用的退货.DayOfWeek检查类的属性

本文关键字:检查 属性 DayOfWeek 何使用 | 更新日期: 2023-09-27 17:59:44

我有一个调度器程序,它允许用户选择一周中允许运行时间表的日期。

我班的财产包括一周中的每一天。

而不是使用像if (Schedule[i].Sunday == true) 这样的7个状态

我该如何处理这样的事情:

if (Schedule[i].(DateTime.Now.DayOfWeek) == true)

我如何使用的退货.DayOfWeek检查类的属性

您可以在类中创建int DaysOfWeek属性,该属性将根据星期几设置其位。假设0000001-周日,0000010-周一,0000011-周日&星期一我从周日开始,因为DayOfWeek枚举从周日开始(http://referencesource.microsoft.com/#mscorlib/system/dayofweek.cs)。然后您可以通过以下方式检查属性:

if ((DaysOfWeek & (1 << (int)DateTime.Now.DayOfWeek)) != 0)
{
}

您应该为Schedule使用多维数组;您的第一个索引将是i,第二个索引是一周中的某一天作为整数。

然后将DayOfWeek强制转换为整数:

if (Schedule[i][((int)DateTime.Now.DayOfWeek)] == true)

请注意,我使用DayOfWeek作为第二个索引,而不是属性。这就是我前面提到使用多维数组的原因。

制作一个将一周中的所有日子设置为标志的枚举,

[Flags]
Enum DaysOfWeek
{
None = 0,
Monday = 1 << 1,
Tuesday 1 << 2,
...
}

然后,您将能够使用days.HasFlag(DaysOfWeek.Monday);检查特定日期。http://msdn.microsoft.com/en-us/library/system.enum.hasflag(v=vs.110).aspx

您也可以在switch语句中使用它们来为每一天执行不同的操作。

遗憾的是,当前的C#system.dayofweek的值从0到6http://msdn.microsoft.com/en-us/library/system.dayofweek(v=vs.110).aspx,因此它不适用于HasFlag

如果不知道时间表的结构,很难说,但如果您在时间表中存储DayOfWeek类型,则可以使用以下方法:

Schedule[i].DayOfWeek == DateTime.Today.DayOfWeek;

你也可以从你的列表中获得一个计划项目的列表,比如这个

var scheduledItems = schedule.Where(x=>x.DayOfWeek == DateTime.Today.DayOfWeek)