12

这段代码是我正在尝试做的简化版本:

string day = Thursday;
DateTime dt = DateTime.Now;

if (day == dt.DayOfWeek)
{
     // start the program
}

我需要从数据库中读取星期几的值,将其分配给一个字符串,然后将该字符串与 dt.DayOfWeek 进行比较以检查程序是否应该执行。

我的错误是:“运算符'=='不能应用于'string'和'System.DayOfWeek'类型的操作数”

任何人都知道如何将字符串与 DateTime.DayOfWeek 值进行比较?

4

4 回答 4

14

用于Enum.Parse获取枚举值:

if ((DayOfWeek)Enum.Parse(typeof(DayOfWeek), day) == dt.DayOfWeek)

如果您不确定它是否是有效值,则有TryParse<T>

Enum val;
if (Enum.TryParse<DayOfWeek>(day, out val) && val == dt.DayOfWeek)
于 2012-12-04T22:51:14.733 回答
13

最简单的是将枚举转换为字符串:

if (day == dt.DayOfWeek.ToString())...

笔记:

  • 如果您可以将类型更改dayDayOfWeek枚举,则可以避免字符串比较(及其相关的本地化/比较问题)。
  • 如果您必须使用字符串,请确保确定大小写是否重要(即“星期四”是否应该等于DayOfWeek.Thursday)并使用相应的String.Equals方法。
  • 考虑Parse按照其他答案中的建议将字符串转换为枚举:((DayOfWeek)Enum.Parse(typeof(DayOfWeek), day)
  • 确保传入的字符串始终是英语 - 如果它可能是其他语言,您需要查看手动匹配值与CultureInfo.DateTimeFormat.DayNames中提供的值。
于 2012-12-04T22:51:12.733 回答
3

尝试DayOfWeek day = DayOfWeek.Thursday;

于 2012-12-04T22:50:48.740 回答
2

您可以使用Enum.TryParse<DayOfWeek>

string strDay = "Wednesday";
DayOfWeek day;
if (Enum.TryParse<DayOfWeek>(strDay, out day)
    && day == DateTime.Today.DayOfWeek)
{
    // ...
}
于 2012-12-04T22:53:27.770 回答