2012-12-04 181 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) 
{ 
    // ... 
}