2016-02-05 194 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