Чтобы расширить то, что сказал Лассе (или, вернее, сделать его немного более явным).
Поскольку 0 может быть преобразовано в тип Enum,
0 - endDate.DayOfWeek becomes
(DayOfWeek)0 - endDate.DayOfWeek
А поскольку вы можете вычесть одно перечисление из другого и получить целочисленную разницу:
(DayOfWeek)0 - endDate.DayOfWeek == (int)endDate.DayOfWeek
Таким образом, поскольку результатом вычитания является int, вы можете добавить к нему 7.
endDate.AddDays(0-endDate.DayOfWeek + 7);
Итак, если значение Enum понедельника равно 1
0 - endDate.DayOfWeek == -1 + 7 == 6
Однако вы не можете сделать обратное.
endDate.DayOfWeek - 0 + 7,
потому что тип результата расчета зависит от самой левой стороны. Таким образом, в то время как 0 - endDate.DayOfWeek приводит к целому числу, endDate.DayOfWeek - 0 приводит к перечислению DayOfWeek.
Самое интересное, что вы могли бы использовать этот побочный эффект, чтобы получить значение enum без приведения, хотя я бы посчитал это хакерским и запутанным ... поэтому его следует избегать.
int enumValue = -(0 - endDate.DayOfWeek);