Как я могу клонировать объект DateTime в C #? - PullRequest
79 голосов
/ 24 ноября 2010

Как я могу клонировать объект DateTime в C #?

Ответы [ 3 ]

181 голосов
/ 24 ноября 2010

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(), myDateTime бы очень быстро ушел, но это не так, потому что dateReference остается на месте:

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
21 голосов
/ 24 ноября 2010
var original = new DateTime(2010, 11, 24);
var clone = original;

DateTime является типом значения, поэтому, когда вы присваиваете его, вы также клонируете его. Тем не менее, нет смысла клонировать его, потому что он неизменен; обычно вы клонируете что-либо, только если вы намереваетесь сменить одну из копий.

10 голосов
/ 24 ноября 2010

DateTime - тип значения, поэтому каждый раз, когда вы присваиваете его новой клонируемой переменной,

DateTime foo = DateTime.Now;
DateTime clone = foo;
...