12

このコードは、私がやろうとしていることの単純化されたバージョンです。

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

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

データベースから曜日の値を読み取り、それを文字列に割り当ててから、その文字列をdt.DayOfWeekと比較して、プログラムを実行する必要があるかどうかを確認する必要があります。

私のエラーはこれです:"Operator'=='はタイプ'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())...

ノート:

  • dayタイプを列挙型に変更できるDayOfWeek場合は、文字列の比較(および関連するローカリゼーション/比較の問題)を回避できます。
  • 文字列を使用する必要がある場合は、大文字と小文字が重要かどうかを判断し(つまり、「木曜日」はに等しい必要が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 に答える