2011-07-14 49 views
7

我可能一直工作太辛苦,但有人可以向我解釋以下,取自Immediate窗口?奇怪的問題與DateTime計算

(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 =無法評估expression`

感謝您的閱讀。

編輯:

其多數民衆贊成給我這個怪異的結果立即窗口,而不是常規代碼。

截圖:http://ploader.net/files/0c2556df475b3075634d7fd2b0575794.PNG

EDIT2:

社區似乎認爲它在VS2010中的錯誤。我想知道@EricLippert或@JonSkeet是否可以花一分鐘來證實這一點,或者如果沒有,請提供關於此行爲的解釋?

+0

這對我來說很好。你可以發佈你的所有代碼嗎?也許這裏還有別的事情呢? – Jay

+0

它不是代碼,只是即時窗口中ad hoc表達式的輸出。 – 5arx

+1

@Jay我的猜測是他在調試時正在談論直接窗口 - 我已經嘗試過了,但它不起作用,但我不知道爲什麼。 – Justin

回答

5

它看起來特定於常量0和非文字值。下面的作品就好了:

int zero = 0; 
zero - (int)DateTime.Now.Date.DayOfWeek 
-4 

雖然下面的失敗:

int four = 4; 
0 - four 
Could not evaluate expression 

更新:我找不到類似的bug報告,所以我創建一個: https://connect.microsoft.com/VisualStudio/feedback/details/679501/integer-literal-0-integer-variable-could-not-evaluate-expression-immediate-window

更新# 2:微軟能夠重現此問題,並將其解決爲「無法修復」,這意味着下一版本的Visual Studio有希望,但VS2010不適用。

+0

我同意這一點。它肯定是一個錯誤?我是否因Visual Studio項目團隊的注意力而獲得某種獎勵? ;-) – 5arx

+1

可能不是,但是如果Eric Lippert讀到這個,你可能會在下一個版本中修復它。 –

+0

我希望@EricLippert正在閱讀。 – 5arx

3

我不知道,它看起來像一個bug。

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

在任何情況下,在編譯的代碼中,所有的行爲都如預期的那樣。

+0

感謝上帝。我以爲我開始瘋了。 – 5arx