12

This code is a simplified version of what I'm trying to do:

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

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

I need to read a day of the week value from a database, assign it to a string, then compare the string to dt.DayOfWeek to check if the program should execute.

My error is this: "Operator '==' cannot be applied to operands of type 'string' and 'System.DayOfWeek"

Anyone know how to compare a string to a DateTime.DayOfWeek value?

rpax
  • 4,468
  • 7
  • 33
  • 57
Mick
  • 677
  • 2
  • 8
  • 14

4 Answers4

17

Easiest is to convert enum to string:

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

Notes:

  • if you can change type of day to DayOfWeek enum you can avoid string comparisons (and its related localization/comparison issues).
  • if you have to use string make sure to decide if case is important or not (i.e. should "thursday" be equal to DayOfWeek.Thursday) and use corresponding String.Equals method.
  • consider converting string to enum with Parse as suggested in other answers: ((DayOfWeek)Enum.Parse(typeof(DayOfWeek), day)
  • make sure incoming string is always English - if it could be in other languages you'll need to look into manually matching value to one provided in CultureInfo.DateTimeFormat.DayNames.
Alexei Levenkov
  • 98,904
  • 14
  • 127
  • 179
  • 1
    But is not a very good practice. It's better to check the equality with enums directy – rpax Mar 09 '14 at 23:49
16

Use Enum.Parse to get the Enum value:

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

If you're not sure it's a valid value, there's TryParse<T>:

Enum val;
if (Enum.TryParse<DayOfWeek>(day, out val) && val == dt.DayOfWeek)
McGarnagle
  • 101,349
  • 31
  • 229
  • 260
4

Try DayOfWeek day = DayOfWeek.Thursday;

L.B
  • 114,136
  • 19
  • 178
  • 224
2

You can use Enum.TryParse<DayOfWeek>:

string strDay = "Wednesday";
DayOfWeek day;
if (Enum.TryParse<DayOfWeek>(strDay, out day)
    && day == DateTime.Today.DayOfWeek)
{
    // ...
}
Tim Schmelter
  • 450,073
  • 74
  • 686
  • 939