2012-12-04 131 views
5

这个代码是什么,我试图做一个简化版本:C#:DateTime.DayOfWeek字符串比较

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

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

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

我的错误是这样的:“运算符‘==’不能应用于类型‘字符串’和“System.DayOfWeek的操作数”

任何人都知道如何将字符串比作DateTime.DayOfWeek值?

+0

c#中的对象有一个'.ToString()'方法,大多数内置的实际解析对象的字符串为 –

+0

'我需要从数据库中读取星期几的值'什么会返回数据库。一个号码?或一个字符串? –

+0

数据库返回日期值的字符串。 – Mick

回答

9

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

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

注:

  • ,如果你可以改变day类型DayOfWeek枚举可以避开字符串比较(与其相关的本地化/比较问题)。
  • 如果您必须使用字符串,请务必确定是否重要(即“星期四”等于DayOfWeek.Thursday)并使用相应的String.Equals方法。
  • 考虑转换字符串Parse以枚举的建议在其他的答案:((DayOfWeek)Enum.Parse(typeof(DayOfWeek), day)
  • 确保传入的字符串时,始终英语 - 如果它可以在其他语言中,你需要寻找到手动匹配值之一CultureInfo.DateTimeFormat.DayNames提供。
+0

这工作,并且是最简单的。谢谢。 – Mick

+1

但不是一个很好的做法。最好用枚举来检查相等性,直接用 – rpax

+0

@rpax - 谢谢。我已经用笔记更新了答案。 –

3

尝试DayOfWeek day = DayOfWeek.Thursday;

9

使用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) 
2

您可以使用Enum.TryParse<DayOfWeek>

string strDay = "Wednesday"; 
DayOfWeek day; 
if (Enum.TryParse<DayOfWeek>(strDay, out day) 
    && day == DateTime.Today.DayOfWeek) 
{ 
    // ... 
}