Para ampliar lo dicho Lasse (o más bien, hacerlo un poco más explícito).
porque 0 es convertible a un tipo de enumeración,
0 - endDate.DayOfWeek becomes
(DayOfWeek)0 - endDate.DayOfWeek
Y ya que se puede restar una enumeración de otro y obtener una diferencia de número entero:
(DayOfWeek)0 - endDate.DayOfWeek == (int)endDate.DayOfWeek
Por lo tanto, dado que el resultado de la resta es un int, puede agregar 7 a él.
endDate.AddDays(0-endDate.DayOfWeek + 7);
Por lo tanto, si el valor de enumeración del lunes es 1
0 - endDate.DayOfWeek == -1 + 7 == 6
Sin embargo, no se puede hacer a la inversa.
endDate.DayOfWeek - 0 + 7,
porque el tipo de resultado del cálculo depende del lado izquierdo. Por lo tanto, mientras que 0 - endDate.DayOfWeek da como resultado un entero, endDate.DayOfWeek - 0 da como resultado una enumeración DayOfWeek.
Lo más interesante es que podría usar este efecto secundario para obtener el valor de una enumeración sin fundición, aunque consideraría que esto es harto y confuso ... así debe evitarse.
int enumValue = -(0 - endDate.DayOfWeek);
Por alguna interesante análisis de los errores de compilación relacionados con esta función, consulte: http://blogs.gotdotnet.com/ericlippert/archive/2006/03/28/the-root-of-all-evil -parte uno.aspx y http://blogs.gotdotnet.com/ericlippert/archive/2006/03/29/the-root-of-all-evil-part-two.aspx –
Para cualquiera que esté buscando las publicaciones del blog de Eric , se han movido a http://blogs.msdn.com/b/ericlippert/archive/2006/03/28/the-root-of-all-evil-part-one.aspx y http: // blogs. msdn.com/b/ericlippert/archive/2006/03/29/the-root-of-all-evil-part-two.aspx –