C # 'da bir DateTime nesnesini nasıl klonlayabilirim?


89

C # 'da bir DateTime nesnesini nasıl klonlayabilirim?


6
Neden a klonlaman gereksin ki DateTime, bu değişmez.
Lukazoid

Yanıtlar:


205

DateTime bir değer türüdür ( struct)

Bu, aşağıdakilerin bir kopya oluşturduğu anlamına gelir:

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

Aşağıdakiler gibi şeyleri de güvenle yapabilirsiniz:

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());
  }
}

Son örnekte myDateTimeher döngüde nasıl yeniden ilan edildiğine dikkat edin; eğer dateReferenceetkilenmiş vardı AddHours()ya AddMinutes(), myDateTimegerçekten çok hızlı kapalı dolaştı olurdu - ama çünkü Götürmezse dateReferencekalır koydu:

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;

DateTimebir değer türüdür, bu yüzden onu atadığınızda onu da klonlamış olursunuz. Bununla birlikte, onu klonlamanın bir anlamı yok çünkü değişmez; tipik olarak, yalnızca kopyalardan birini değiştirme niyetiniz varsa bir şeyi klonlarsınız.


1
+1 Kabul Edildi. Sorunu çözme şeklim, yeni bir DateTime nesnesi oluşturmak ve orijinal datetime nesnesinden klonlamak istediğim gerekli parçaları (gün, ay, yıl) kopyalamak ve ardından yeni nesne için saati manuel olarak ayarlamaktı. .. Örnek olarak.
Dal

12

DateTime bir değer türüdür, bu nedenle onu yeni bir değişkene her atadığınızda klonlamakta olursunuz.

DateTime foo = DateTime.Now;
DateTime clone = foo;
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.