在此期间无限循环

时间:2016-02-05 06:58:55

标签: c# .net while-loop infinite-loop

为什么这会无限期地运行而不是添加天数

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

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

目标是在一年中的所有日子里度过。

谢谢!

3 个答案:

答案 0 :(得分:9)

在.NET中DateTime是不可变的,因此AddDays方法只返回新日期,而不是更改startDate本身。

您应该将此新值分配回startDate

startDate = startDate.AddDays(1);

答案 1 :(得分:1)

为了避免此类讨厌的错误(不分配回AddDays(1)结果),我建议实施for循环而不是while

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

答案 2 :(得分:0)

startDate.AddDays(1);不会更改startDate,因此startDate < endDate始终为真。