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);
答
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
+1链接到“不可变”的解释链接。 – 2012-03-30 11:30:37
@DanielHilgarth:谢谢,但仍然是一个更快的答案几乎总是被评为更高,接受一个更具描述性的答案。 – Ian 2012-03-30 11:32:37
这就是为什么我首先发布一个简短的答案,然后使其更具描述性;-)较高的评分答案在顶部,大多数人不会再看。 – 2012-03-30 11:33:50