我正在尝试创建一个循环,其中我的日期在for循环中增加1个月。目前只显示今天的日期。并没有增加。我想将显示日期更改为选定的显示日期而不是今天/默认
for (int i = 1; i <= 15; i++)
{
DateTime initialdate = InitialDate.DisplayDate;
InitialDate.DisplayDate.AddMonths(1);
initialdate = InitialDate.DisplayDate;
}
我没有显示任何使用的初始日期,因为我认为没有必要。
InitialDate是一个DateTimePicker
初始化Datepicker
<DatePicker x:Name="InitialDate"></DatePicker>
答案 0 :(得分:9)
问题:您需要指定InitialDate.DisplayDate.AddMonths(1)
的返回值。
来自MSDN:DateTime.AddMonths()
返回一个新的DateTime,它将指定的月数添加到 这个实例的价值。
替换它:
InitialDate.DisplayDate.AddMonths(1);
有了这个:
InitialDate.DisplayDate = InitialDate.DisplayDate.AddMonths(1);
答案 1 :(得分:9)
DateTime.AddMonths
不会更改您调用它的值 - 它会返回 new 值。 所有 DateTime
方法都是如此。没有什么可以改变价值,这是一个很好的工作,因为它是一个值类型,如果它们是变量的副本(例如由于被属性返回的值调用),变化将会丢失。
你想:
InitialDate.DisplayDate = InitialDate.DisplayDate.AddMonths(1);
假设你在循环体的其余部分使用initialdate
,如果你只是在增量之后声明它就会更清楚:
for (int i = 1; i <= 15; i++)
{
InitialDate.DisplayDate = InitialDate.DisplayDate.AddMonths(1);
DateTime initialDate = InitialDate.DisplayDate;
// Use initialDate here
}
(为了约定,我已将变量重命名为大写D
。)
答案 2 :(得分:1)
这样做:
DateTime initialdate = InitialDate.DisplayDate.AddMonth(1);
答案 3 :(得分:0)
你的问题源于这样一个事实:InitialDate.DisplayDate.AddMonths(1);
返回一个新的DateTime
,而不是修改它被调用的实例。您对该调用发出的返回值不执行任何操作。相反,你想要;
InitialDate.DisplayDate = InitialDate.DisplayDate.AddMonths(1);
仅供参考,你会在C#中看到很多。我会说,通常会改变对象值的方法返回一个新实例,而不是改变它们被调用的实例。