Странная проблема с вычислением DateTime - PullRequest
7 голосов
/ 14 июля 2011

Я, наверное, слишком много работал, но может кто-нибудь объяснить мне следующее, взятое из окна 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 = Не удалось оценить выражение`

Спасибо за чтение.

EDIT:

Это окно Immediate, которое дает мне этот странный результат, а не обычный код.

Снимок экрана: http://ploader.net/files/0c2556df475b3075634d7fd2b0575794.PNG

EDIT2:

Сообщество, похоже, считает, что это ошибка в VS2010. Интересно, может ли @EricLippert или @JonSkeet уделить минуту, чтобы подтвердить это или, если нет, дать объяснение этому поведению?

Ответы [ 2 ]

5 голосов
/ 14 июля 2011

Это выглядит специфично для константы 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.

3 голосов
/ 14 июля 2011

Понятия не имею, для меня это похоже на ошибку.

// 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

В любом случае все работает так, как ожидается в скомпилированном коде.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...