7 Stimmen

Seltsames Problem mit DateTime-Berechnung

Wahrscheinlich habe ich zu viel gearbeitet, aber kann mir jemand das Folgende erklären, das aus der Immediate Fenster?

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

et

(int)DayOfWeek.Sunday = 0

et

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

sondern
(int)DayOfWeek.Sunday - (int)DateTime.Now.Date.DayOfWeek = Ausdruck konnte nicht ausgewertet werden`

Vielen Dank für die Lektüre.

EDITAR:

Es ist das Fenster "Immediate", das mir dieses seltsame Ergebnis liefert, nicht der reguläre Code.

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

EDIT2:

Die Community scheint zu glauben, dass es ein Fehler in VS2010 ist. Ich frage mich, ob @EricLippert oder @JonSkeet eine Minute erübrigen könnten, um dies zu bestätigen oder, falls nicht, eine Erklärung für dieses Verhalten zu liefern?

5voto

Joel Rondeau Punkte 7338

Es sieht spezifisch für die Konstante 0 und einen nicht-literalen Wert aus. Das folgende Beispiel funktioniert einwandfrei:

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

Während das Folgende scheitert:

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

Update: Ich konnte keinen ähnlichen Fehlerbericht finden, also habe ich einen erstellt: https://connect.microsoft.com/VisualStudio/feedback/details/679501/integer-literal-0-integer-variable-could-not-evaluate-expression-immediate-window

Update #2: Microsoft ist in der Lage, das Problem zu reproduzieren und hat es als "Won't Fix" aufgelöst, was bedeutet, dass es Hoffnung für die nächste Version von Visual Studio gibt, aber nicht für VS2010.

3voto

Justin Punkte 82143

Ich habe keine Ahnung, es sieht für mich wie ein Fehler aus.

// 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 jedem Fall verhält sich im kompilierten Code alles wie erwartet.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X