Làm cách nào để sao chép một đối tượng DateTime trong C #?
Câu trả lời:
DateTime là một kiểu giá trị ( struct
)
Điều này có nghĩa là phần sau sẽ tạo ra một bản sao:
DateTime toBeClonedDateTime = DateTime.Now;
DateTime cloned = toBeClonedDateTime;
Bạn cũng có thể làm những việc như:
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());
}
}
Lưu ý cách trong ví dụ cuối cùng myDateTime
được khai báo mới trong mỗi chu kỳ; nếu dateReference
bị ảnh hưởng bởi AddHours()
hoặc AddMinutes()
, myDateTime
sẽ biến mất rất nhanh - nhưng không, vì dateReference
vẫn đặt:
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
var original = new DateTime(2010, 11, 24);
var clone = original;
DateTime
là một kiểu giá trị, vì vậy khi bạn gán nó, bạn cũng sao chép nó. Điều đó nói rằng, không có ích gì khi nhân bản nó bởi vì nó bất biến; thường thì bạn chỉ sao chép một cái gì đó nếu bạn có ý định thay đổi một trong các bản sao.
DateTime là một kiểu giá trị nên mỗi khi bạn gán nó cho một biến mới, bạn đang sao chép.
DateTime foo = DateTime.Now;
DateTime clone = foo;
DateTime
, nó là bất biến.