【问题标题】:Infinite Loop during while期间无限循环
【发布时间】:2016-05-15 01:42:55
【问题描述】:

为什么会无限期运行而不增加天数

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

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

目标是遍历一年中的所有日子。

谢谢!

【问题讨论】:

  • 旁注:for 循环而不是 while 看起来,恕我直言,更自然:for (var date = new DateTime(year, 1, 1); date &lt; new DateTime(year + 1, 1, 1); date = date.AddDays(1)) { ... }

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


【解决方案1】:

为了避免这种讨厌的错误(不返回AddDays(1)结果)我建议实现for循环而不是while

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

【讨论】:

  • 我最终这样做了。 +1
【解决方案2】:

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

你应该把这个新值赋回startDate

startDate = startDate.AddDays(1);

【讨论】:

  • 有点跑题了。但是.AddDays(1) 方法是否涵盖闰年?
  • 当然可以。你可以很容易地检查它:var date1 = new DateTime(2016, 2, 28).AddDays(1); var date2 = new DateTime(2015, 2, 28).AddDays(1);
【解决方案3】:

startDate.AddDays(1); 不会改变startDate,所以startDate &lt; endDate 始终为真。

【讨论】:

    猜你喜欢
    • 2014-09-11
    • 2015-12-28
    • 2015-08-19
    • 2020-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多