2014-02-19 71 views
0

我想创建一个循环,其中我的日期在for循环中增加1个月。目前它只显示今天的日期。并没有增加。我想改变显示的日期选择显示日期,而不是今天/默认递增日期时间变量

for (int i = 1; i <= 15; i++) 
{ 

    DateTime initialdate = InitialDate.DisplayDate; 
    InitialDate.DisplayDate.AddMonths(1); 
    initialdate = InitialDate.DisplayDate; 

} 

我没有表现出任何的initialdate被使用,因为我不认为这是必要的。

InitialDate是日期选择器
<DatePicker x:Name="InitialDate"></DatePicker>

+1

DateTime值是不可变的。该操作将返回一个新的DateTime值,您需要将其分配给新的DatTime类型变量。 – HOKBONG

回答

9

问题的一个DateTimePicker
初始化:
您需要分配InitialDate.DisplayDate.AddMonths(1)的返回值。

从MSDN:DateTime.AddMonths()

返回一个新的日期时间,增加了几个月的指定数量的此实例的 值。

替换此:

InitialDate.DisplayDate.AddMonths(1); 

这一点:

InitialDate.DisplayDate = InitialDate.DisplayDate.AddMonths(1); 
+0

完美的答案!我可以问我如何解决默认日期问题。它显示今天的日期,而不是选择日期 – Master

+0

@ user3276954:你能告诉我们完整的代码吗? –

+0

您是否认为不是显示日期,而是需要选择日期才能修复它? – Master

9

DateTime.AddMonths不会改变你怎么称呼它的价值 - 它返回一个值。这是全部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)。

0

You pr因为InitialDate.DisplayDate.AddMonths(1);返回一个新的DateTime而不是修改它被调用的实例。您对该通话发出的返回值无效。相反你想要;

InitialDate.DisplayDate = InitialDate.DisplayDate.AddMonths(1); 

只是FYI你会看到很多在C#中。我会说更多的时候,更改一个对象的值返回一个新的实例,而不是改变他们被调用的实例的方法。

1

做到这一点:

DateTime initialdate = InitialDate.DisplayDate.AddMonth(1);