2012-12-04 14 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値に文字列を比較する方法を誰もが知っています?

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

注:

+0

オブジェクトは '.ToString()'メソッドを持っていますが、組み込みのもののほとんどは実際には文字列の中のオブジェクトを解析します –

+0

「データベースから曜日の値を読み取る必要があります」DBを返すもの数?または文字列ですか? –

+0

DBは、曜日値の文字列を返します。 – Mick

答えて

9

最も簡単に文字列に列挙を変換することです試してみてください、あなたがDayOfWeek列挙にdayの種類を変更することができます場合は、文字列の比較を避けることができ

  • (と関連するローカリゼーション/比較の問題)。
  • 文字列を使用する必要がある場合は、大文字と小文字の区別(つまり、「木曜日」はDayOfWeek.Thursdayにする必要があります)を決定し、対応するString.Equalsメソッドを使用してください。 - それは他の言語であることができれば、あなたがCultureInfo.DateTimeFormat.DayNames内に提供された1つに手動で一致する値を検討する必要があります((DayOfWeek)Enum.Parse(typeof(DayOfWeek), day)
  • 入ってくる文字列は常に英語であることを確認してください:
  • は、他の回答で提案されているようにParseで列挙した文字列を変換考えます。
+0

これは動作し、最も簡単です。ありがとう。 – Mick

+1

しかし、あまり良いことではありません。 enums directy – rpax

+0

@rpaxで平等をチェックする方が良いです - ありがとうございます。私はノートで答えを更新しました。 –

3

DayOfWeek day = DayOfWeek.Thursday;

9

使用Enum.Parse列挙値を取得する:あなたはそれが有効な値だかわからない場合は、TryParse<T>があります

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

を:

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) 
{ 
    // ... 
}