Pour développer ce que dit Lasse (ou plutôt, le rendre un peu plus explicite).
Parce que 0 est convertable à un type Enum,
0 - endDate.DayOfWeek becomes
(DayOfWeek)0 - endDate.DayOfWeek
Et puisque vous pouvez soustraire un ENUM d'un autre et obtenir une différence de nombre entier:
(DayOfWeek)0 - endDate.DayOfWeek == (int)endDate.DayOfWeek
Ainsi, étant donné que le résultat de la soustraction est un int, vous pouvez alors y ajouter 7.
endDate.AddDays(0-endDate.DayOfWeek + 7);
Ainsi, si la valeur Enum lundi est 1
0 - endDate.DayOfWeek == -1 + 7 == 6
Cependant, vous ne pouvez pas faire l'inverse.
endDate.DayOfWeek - 0 + 7,
car le type de résultat du calcul dépend du côté le plus à gauche. Ainsi, alors que 0 - endDate.DayOfWeek aboutit à un entier, endDate.DayOfWeek - 0 aboutit à un enum DayOfWeek.
Plus intéressant, vous pouvez utiliser cet effet de bord pour obtenir la valeur d'une énumération sans lancer, bien que je considérerais ce hackish et confus ... donc à éviter.
int enumValue = -(0 - endDate.DayOfWeek);
Pour une analyse intéressante de bugs du compilateur impliquant cette fonctionnalité, consultez: http://blogs.gotdotnet.com/ericlippert/archive/2006/03/28/the-root-of-all-evil -partie un.aspx et http://blogs.gotdotnet.com/ericlippert/archive/2006/03/29/the-root-of-all-evil-part-two.aspx –
Pour tous ceux qui recherchent les articles du blog d'Eric , ils sont passés à http://blogs.msdn.com/b/ericlippert/archive/2006/03/28/the-root-of-all-evil-part-one.aspx et http: // blogs. msdn.com/b/ericlippert/archive/2006/03/29/the-root-of-all-evil-part-two.aspx –