2011-07-14 3 views
7

J'ai probablement travaillé trop dur, mais quelqu'un peut-il m'expliquer ce qui suit, tiré de la fenêtre Immediate?Problème étrange avec le calcul DateTime

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

et

(int)DayOfWeek.Sunday = 0

et

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

mais
(int)DayOfWeek.Sunday - (int)DateTime.Now.Date.DayOfWeek = Impossible d'évaluer expression`

Merci d'avoir lu.

EDIT:

Sa la fenêtre immédiate qui me donne ce résultat bizarre, pas de code régulier.

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

EDIT2:

La communauté semblent penser son un bogue dans VS2010. Je me demande si @EricLippert ou @JonSkeet pourraient épargner une minute pour confirmer ceci ou, si ce n'est pas, offrir une explication sur ce comportement?

+0

Cela fonctionne très bien pour moi. Pouvez-vous poster tout votre code? Peut-être qu'il se passe autre chose ici? – Jay

+0

Ce n'est pas du code, juste la sortie d'expressions ad hoc dans la fenêtre Exécution. – 5arx

+1

@Jay Je suppose qu'il parle de la fenêtre immédiate lors du débogage - je l'ai essayé et ça ne marche pas, mais je ne sais pas pourquoi. – Justin

Répondre

5

Il semble spécifique à la constante 0 et à une valeur non littérale. Les travaux suivants très bien:

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

Bien que les éléments suivants ne parvient:

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

Mise à jour: je ne pouvais pas trouver un rapport de bogue similaire, donc je créé un: https://connect.microsoft.com/VisualStudio/feedback/details/679501/integer-literal-0-integer-variable-could-not-evaluate-expression-immediate-window

Mise à jour # 2: Microsoft est capable de reproduire le problème et l'a résolu comme "Ne corrige pas", ce qui signifie qu'il y a de l'espoir pour la prochaine version de Visual Studio, mais pas pour VS2010.

+0

Je suis d'accord avec ça. Sûrement c'est un bug? Est-ce que je reçois une sorte de prix pour avoir porté cela à l'attention des membres de l'équipe de projet de Visual Studio? ;-) – 5arx

+1

Probablement pas, mais si Eric Lippert lit ceci, vous pourriez le faire corriger dans la prochaine version. –

+0

Eh bien, j'espère que @EricLippert est en train de lire. – 5arx

3

Je n'en ai aucune idée, ça ressemble à un bug pour moi.

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

Dans tous les cas, tout se comporte comme prévu dans le code compilé.

+0

Dieu merci pour cela. Je pensais que je commençais à devenir fou. – 5arx