2016-02-05 234 views
1

爲什麼會這樣運行下去,並且不添加天無限循環中而

var startDate = new DateTime(year, 1, 1); 
var endDate = startDate.AddYears(1); 

while (startDate < endDate) 
{ 
    startDate.AddDays(1); 
} 

的目標是通過循環在一年內所有的日子。

謝謝!

+2

旁註:'for'循環,而不是'while'長相,恕我直言,更自然:'for(var date = new DateTime(year,1,1); date

回答

9

在.NET DateTime是不可變的,所以AddDays方法只是返回新的日期,而不是改變startDate本身。

您應該指定這個新值回startDate

startDate = startDate.AddDays(1); 
+0

有點話題。但是'.AddDays(1)'方法覆蓋了閏年? – user1027620

+0

它確實如此。你可以很容易地檢查它:'var date1 = new DateTime(2016,2,28).AddDays(1); var date2 = new DateTime(2015,2,28).AddDays(1);' –

0

startDate.AddDays(1);不改變startDate,所以startDate < endDate始終是真實的。

1

爲了避免這種討厭的錯誤(未分配回AddDays(1)結果)我建議實施for循環,而不是while

for (var date = new DateTime(year, 1, 1); 
      date < new DateTime(year + 1, 1, 1); 
      date = date.AddDays(1)) { 
    ... 
    } 
+0

我最終這樣做了。 +1 – user1027620