Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Weird Issue with DateTime calculation

I've probably been working too hard, but can someone explain to me the following, taken from the Immediate window?

(int)DateTime.Now.Date.DayOfWeek = 4

and

(int)DayOfWeek.Sunday = 0

and

(int)DateTime.Now.Date.DayOfWeek - (int)DayOfWeek.Sunday = 4

but
(int)DayOfWeek.Sunday - (int)DateTime.Now.Date.DayOfWeek = Could not evaluate expression`

Thanks for reading.

EDIT:

Its the Immediate window that's giving me this weird result, not regular code.

Screenshot: http://ploader.net/files/0c2556df475b3075634d7fd2b0575794.PNG

EDIT2:

The community seem to think its a bug in VS2010. I wonder if @EricLippert or @JonSkeet could spare a minute to confirm this or, if its not, offer an explanation about this behaviour?

like image 530
indra Avatar asked Jul 14 '11 16:07

indra


2 Answers

It looks specific to the constant 0 and a non-literal value. The following works just fine:

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

While the following fails:

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

Update: I couldn't find a similar bug report, so I created one: https://connect.microsoft.com/VisualStudio/feedback/details/679501/integer-literal-0-integer-variable-could-not-evaluate-expression-immediate-window

Update #2: Microsoft is able to reproduce the issue and has resolved it as "Won't Fix", meaning there's hope for the next version of Visual Studio, but not for VS2010.

like image 71
Joel Rondeau Avatar answered Oct 01 '22 00:10

Joel Rondeau


I have no idea, it looks like a bug to me.

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

In any case everything behaves as expected in the compiled code.

like image 24
Justin Avatar answered Oct 01 '22 02:10

Justin