Home > Mobile >  Operator cannot be applied to operands of type 'bool' and 'DayOfWeek'
Operator cannot be applied to operands of type 'bool' and 'DayOfWeek'

Time:08-26

I have a website that has checkboxes that read Monday - Friday and the user is able to select none, one or more than one.

CDay list contains the days of the week: Monday - Friday. What I want to do is take in the current day of the week and return true if the user has chosen that day

list code:

 public List<CDay> days { get; set; }
    public CDay()
    {
     Name = string.Empty; // Monday, Tuesday, Wednesday, Thursday, Friday
     Selected = false; //will be true if user has selected this checkbox
    }
    

my logic: // is the current day the same for any of the days the user has chosen

private bool currentDayOfTheWeek (DateTime day, List <CDay> days)
        {
          System.DayOfWeek wk = DateTime.Today.DayOfWeek;
        
          for (int i = 0; i < days.Count; i  )
          {

            if ( days[i].Selected.Equals(true) && wk) 
                 {
                     return true;
                 }
              }
            return false;
          }

My problem is that this statement: days[i].Selected.Equals(true) && wk gives me an "Operator '==' cannot be applied to operands of type 'bool' and 'DayOfWeek'.. not sure how I would go about this error?

CodePudding user response:

The line

if ( days[i].Selected.Equals(true) && wk)

is interpreted by the compiler as

if ( days[i].Selected.Equals(true) && wk == true)

This, however, doesn't make sense - wk is of type DayOfWeek, an enumeration that assigns a number (and int, internally) to each day of the week. Boolean values are not part of the enumeration and the compiler doesn't know how to convert your wk value to true or false so it throws that error.

To fix this, you need to explicitly specify what condition wk should pass - reading your code, it could perhaps equal to the selected day in the days collection?

CodePudding user response:

This should get you the day as a string "Monday" or "Tuesday" etc:

var dayOfWeek = DateTime.Today.ToString("dddd");

Then your check can become:

for (int i = 0; i < days.Count; i  )
{
    if (days[i].Selected.Equals(true) && dayOfWeek == days[i].Name) 
    {
        return true;
    }
}
return false;

CodePudding user response:

fix the class and the code

private bool currentDayOfTheWeek(DateTime day, List<CDay> days)
{
    var dow = day.DayOfWeek.ToString();

    foreach (var d in days)
        if (d.Selected && dow == d.Name) return true;

    return false;
}

public class CDay
{
    public string Name {get; set;} = string.Empty; // Monday, Tuesday, Wednesday, Thursday, Friday
    public bool Selected {get; set;} // false by default, will be true if user has selected this checkbox
}

or using LINQ

private bool currentDayOfTheWeek(DateTime day, List<CDay> days)
{
    var dow = day.DayOfWeek.ToString();

    return days.Any(d => d.Selected && dow == d.Name);
}

  • Related