C#でDateTimeオブジェクトのクローンを作成するにはどうすればよいですか?


89

C#でDateTimeオブジェクトのクローンを作成するにはどうすればよいですか?


6
なぜあなたはクローンを作る必要があるのでしょうかDateTime、それは不変です。
ルカゾイド2016年

回答:


203

DateTimeは値型ですstruct

これは、以下がコピーを作成することを意味します。

DateTime toBeClonedDateTime = DateTime.Now;
DateTime cloned = toBeClonedDateTime;

次のようなことも安全に行うことができます。

var dateReference = new DateTime(2018, 7, 29);
for (var h = 0; h < 24; h++) {
  for (var m = 0; m < 60; m++) {
    var myDateTime = dateReference.AddHours(h).AddMinutes(m);
    Console.WriteLine("Now at " + myDateTime.ToShortDateString() + " " + myDateTime.ToShortTimeString());
  }
}

最後の例でmyDateTimeは、各サイクルで新たに宣言される方法に注意してください。またはのdateReference影響を受けていたとしたら、非常に速くさまよったでしょうが、そうではありません。AddHours()AddMinutes()myDateTimedateReference

Now at 2018-07-29 0:00
Now at 2018-07-29 0:01
Now at 2018-07-29 0:02
Now at 2018-07-29 0:03
Now at 2018-07-29 0:04
Now at 2018-07-29 0:05
Now at 2018-07-29 0:06
Now at 2018-07-29 0:07
Now at 2018-07-29 0:08
Now at 2018-07-29 0:09
...
Now at 2018-07-29 23:55
Now at 2018-07-29 23:56
Now at 2018-07-29 23:57
Now at 2018-07-29 23:58
Now at 2018-07-29 23:59

26
var original = new DateTime(2010, 11, 24);
var clone = original;

DateTimeは値型であるため、割り当てるときにクローンも作成します。とはいえ、不変であるため、クローンを作成しても意味がありません。通常、コピーの1つを変更する意図がある場合にのみ、何かを複製します。


1
+1同意しました。この問題を回避する方法は、新しいDateTimeオブジェクトを作成し、元のdatetimeオブジェクトから(日、月、年)などのクローンを作成する必要のある部分をコピーして、新しいオブジェクトの時刻を手動で設定することでした。 ..例として。
ダル

12

DateTimeは値型であるため、クローンを作成する新しい変数に割り当てるたびに。

DateTime foo = DateTime.Now;
DateTime clone = foo;
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.