2012-03-30 13 views
1

whileループ内で実行されないDateTime AddDays()メソッドを停止させるものはありますか?私はこの単純なコードを持っています。whileループ内でAddDays()が動作しない

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、誰もが知っているなぜ?

答えて

9

DateTimeがImmutableであるという理由は、これを直接変更することはできず、代わりに新しいインスタンスを作成する必要があるからです。文字列は、あなたがよく慣れ親しんでいるかもしれないこのような振る舞いをする別の型です。

first_day = first_day.AddDays(1); 
+0

"不変"の説明へのリンクです。 –

+1

@DanielHilgarth:ありがたいですが、まだまだ速い答えは、ほとんど常に高く評価されており、より説明的な回答よりも受け入れられています。 – Ian

+1

だからこそ私は最初に短い答えを投稿し、それをより分かりやすいものにしています;-)上位の回答は一番上にあり、ほとんどの人はこれ以上見ていません。 –

10

DateTimeは変更できません。すべての計算は構造体の値を変更しない - Returns a new System.DateTime that adds the specified number of days to the value of this instance. DateTime構造体の上に(例えばSubstract、AddHoursなど、追加など)すべての操作に関する:あなたはDateTime.AddDays方法の説明を確認した場合 :あなたは

first_day = first_day.AddDays(1); 

UPDATEを行う必要があります。その代わりに、計算は、その値が計算の結果である新しいDateTime構造体を返します。これは、DateTimeが不変のstructであるためです。私。インスタンス値は作成後に変更することはできません。

4

DateTimeは変更できません。

first_day = first_day.AddDays(1); 
+0

コードをコードのように編集していただきありがとうございます。 –

関連する問題