2014-02-19 156 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);