Możesz także bezpiecznie wykonywać takie czynności jak:
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());
}
}
Zwróć uwagę, jak w ostatnim przykładzie myDateTimejest deklarowana od nowa w każdym cyklu; gdyby dateReferencezostał dotknięty AddHours()lub AddMinutes(), myDateTimeodszedłby bardzo szybko - ale tak nie jest, ponieważ dateReferencepozostaje na miejscu:
Now at 2018-07-290:00
Now at 2018-07-290:01
Now at 2018-07-290:02
Now at 2018-07-290:03
Now at 2018-07-290:04
Now at 2018-07-290:05
Now at 2018-07-290:06
Now at 2018-07-290:07
Now at 2018-07-290:08
Now at 2018-07-290:09
...
Now at 2018-07-2923:55
Now at 2018-07-2923:56
Now at 2018-07-2923:57
Now at 2018-07-2923:58
Now at 2018-07-2923:59
var original = new DateTime(2010, 11, 24);
var clone = original;
DateTimejest typem wartości, więc przypisując go, również go klonujesz. To powiedziawszy, nie ma sensu go klonować, ponieważ jest niezmienny; zazwyczaj klonowałeś coś tylko wtedy, gdy miałeś zamiar zmienić jedną z kopii.
+1 Zgoda. Sposób, w jaki poradziłem sobie z problemem, polegał na utworzeniu nowego obiektu DateTime i po prostu skopiowaniu wymaganych części, które chciałem sklonować, takich jak (dzień, miesiąc, rok) z oryginalnego obiektu daty i godziny, a następnie ręcznie ustawić czas dla nowego obiektu. .. jako przykład.
Dal
12
DateTime jest typem wartości, więc za każdym razem, gdy przypisujesz go do nowej zmiennej, którą klonujesz.
DateTime
, to jest niezmienne.Odpowiedzi:
DateTime to typ wartości (
struct
)Oznacza to, że następujące elementy tworzą kopię:
Możesz także bezpiecznie wykonywać takie czynności jak:
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()); } }
Zwróć uwagę, jak w ostatnim przykładzie
myDateTime
jest deklarowana od nowa w każdym cyklu; gdybydateReference
został dotkniętyAddHours()
lubAddMinutes()
,myDateTime
odszedłby bardzo szybko - ale tak nie jest, ponieważdateReference
pozostaje na miejscu: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
źródło
var original = new DateTime(2010, 11, 24); var clone = original;
DateTime
jest typem wartości, więc przypisując go, również go klonujesz. To powiedziawszy, nie ma sensu go klonować, ponieważ jest niezmienny; zazwyczaj klonowałeś coś tylko wtedy, gdy miałeś zamiar zmienić jedną z kopii.źródło
DateTime jest typem wartości, więc za każdym razem, gdy przypisujesz go do nowej zmiennej, którą klonujesz.
źródło