Странная проблема с вычислением DateTime
Я, наверное, слишком много работал, но может кто-нибудь объяснить мне следующее, взятые из Immediate
окно?
(int)DateTime.Now.Date.DayOfWeek
= 4
а также
(int)DayOfWeek.Sunday
= 0
а также
(int)DateTime.Now.Date.DayOfWeek - (int)DayOfWeek.Sunday
= 4
но(int)DayOfWeek.Sunday - (int)DateTime.Now.Date.DayOfWeek
= Не удалось оценить выражение`
Спасибо за прочтение.
РЕДАКТИРОВАТЬ:
Это окно Immediate, которое дает мне этот странный результат, а не обычный код.
Снимок экрана: http://ploader.net/files/0c2556df475b3075634d7fd2b0575794.PNG
EDIT2:
Сообщество, похоже, считает, что это ошибка в VS2010. Интересно, может ли @EricLippert или @JonSkeet уделить минуту, чтобы подтвердить это или, если нет, дать объяснение этому поведению?
2 ответа
Это выглядит специфически для константы 0 и не буквального значения. Следующее работает просто отлично:
int zero = 0;
zero - (int)DateTime.Now.Date.DayOfWeek
-4
Пока не получается следующее:
int four = 4;
0 - four
Could not evaluate expression
Обновление: я не смог найти похожий отчет об ошибке, поэтому создал его: https://connect.microsoft.com/VisualStudio/feedback/details/679501/integer-literal-0-integer-variable-could-not-evaluate-expression-immediate-window
Обновление № 2: Microsoft способна воспроизвести проблему и решила ее как "Не исправлять", что означает, что есть надежда на следующую версию Visual Studio, но не на VS2010.
Понятия не имею, для меня это похоже на ошибку.
// This doesn't work
0 - (int)DateTime.Now.Date.DayOfWeek
// But loads of similar variations do:
1 - (int)DateTime.Now.Date.DayOfWeek
-1 - (int)DateTime.Now.Date.DayOfWeek
a - (int)DateTime.Now.Date.DayOfWeek
0 - (int)DayOfWeek.Thursday
В любом случае все работает так, как ожидается в скомпилированном коде.