2
votes

I am looking at https://msdn.microsoft.com/en-us/library/windows/desktop/aa384024%28v=vs.85%29.aspx

Sunday  = 1
Monday  = 2
Tuesday = 4
Wednesday =8
Thursday = 16
Friday = 32
Saturday= 64

This property contains an aggregated value of selected DayOfWeek in the Scheduled Tasks. For example, value 66 is Monday or Sunday.

I would like to convert this value to a List(of DayOfWeek).

What is the best approach to convert values like this?

1
To be clear, 66 is Monday | Saturday, not Monday | Sunday. - Jacob
You are right! Thanks! - serializer

1 Answers

2
votes
var weekDays = (int)daysOfWeek;
var weekDayEnumerable = Enumerable
    .Range(0, 7)
    .Where(i => { var isMatch = (weekDays & 1) == 1; weekDays >>= 1; return isMatch; })
    .Select(i => (DayOfWeek)i)
    .ToList();

OK, maybe trying too hard to avoid a loop, but you can also convert to a similar for loop if you prefer.

Update:

Version that doesn't do any mutation:

var weekDays = (int)daysOfWeek;
var weekDayEnumerable = Enumerable
    .Range(0, 7)
    .Where(i => (weekDays & (1 << i)) > 0)
    .Select(i => (DayOfWeek)i)
    .ToList();