2011-07-14 11 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`

を評価することができませんでした

読んでいただきありがとうございます。

EDIT:

その私は、この奇妙な結果を与えているイミディエイトウィンドウではなく、通常のコード。

スクリーンショット:http://ploader.net/files/0c2556df475b3075634d7fd2b0575794.PNG

EDIT2:

コミュニティはVS2010でそのバグを考えているようです。 @EricLippertや@JonSkeetがこれを確認するのに1分余裕があるのか​​、もしそうでなければ、この動作についての説明を提供できるのだろうか?

+0

これはうまく動作します。すべてのコードを投稿できますか?おそらくここに何か他のことが起こっているでしょうか? – Jay

+0

そのコードではなく、イミディエイトウィンドウのアドホック式の出力だけです。 – 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 

アップデート:私は同様のバグレポートを見つけることができませんでしたので、私は1つを作成しました: https://connect.microsoft.com/VisualStudio/feedback/details/679501/integer-literal-0-integer-variable-could-not-evaluate-expression-immediate-window

を更新# 2:マイクロソフトはこの問題を再現することができ、 "修正されない"と解決しました。これは、VS2010ではなく、次のバージョンのVisual Studioに期待していることを意味します。

+0

私はそれに同意します。確かにそのバグ?これをVisual Studioのプロジェクトチームのエッグヘッドの注目を引くことで何らかの賞を得られますか? ;-) – 5arx

+1

おそらくそうではありませんが、Eric Lippertがこれを読んでいれば、次のリリースで修正されるかもしれません。 –

+0

まあ、@EricLippertが読んでくれることを願っています。 – 5arx

3

私には分かりませんが、私にはバグのようです。

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