AddDays()不能在while循环内工作

问题描述:

有没有什么能够阻止DateTime AddDays()方法在while循环中不运行。我有这么简单的代码;AddDays()不能在while循环内工作

DateTime last_day = monthCalendar2.SelectionRange.End; 
DateTime first_day = new DateTime(year, month, day); 

//Insert dates into vector 
while (first_day != last_day) 
{ 
    dates.Add(first_day); 
    first_day.AddDays(1); 
} 

我一步一步完成程序,first_day永远不会改变,任何人都知道为什么?!

原因是DateTime是Immutable,这意味着你不能直接修改它,而是需要创建一个新的实例。字符串是以这种方式表现的另一种类型,您可能更习惯于这种方式。

first_day = first_day.AddDays(1); 
+0

+1链接到“不可变”的解释链接。 – 2012-03-30 11:30:37

+1

@DanielHilgarth:谢谢,但仍然是一个更快的答案几乎总是被评为更高,接受一个更具描述性的答案。 – Ian 2012-03-30 11:32:37

+1

这就是为什么我首先发布一个简短的答案,然后使其更具描述性;-)较高的评分答案在顶部,大多数人不会再看。 – 2012-03-30 11:33:50

DateTime是不可变的。你应该做

first_day = first_day.AddDays(1); 

UPDATE: 如果检查DateTime.AddDays方法说明:Returns a new System.DateTime that adds the specified number of days to the value of this instance.,涉及到的所有操作(如添加,。减去,AddHours等)上的日期时间结构 - 任何计算不改变结构的价值。相反,计算返回一个新的DateTime结构,其值是计算结果。这是因为DateTime是不可变的结构。即实例值在创建后无法更改。

DateTime无法更改,所以请做。

first_day = first_day.AddDays(1); 
+0

感谢编辑代码看起来像代码,我往往忘了这样做:/ – 2012-03-30 11:31:51