2012-12-19 53 views
132

Có lý do nào để chọn một trong số này so với phương thức kia không?Ngày giờ mới() và mặc định (Ngày giờ)

DateTime myDate = new DateTime(); 

hoặc

DateTime myDate = default(DateTime); 

Cả hai người đều bình đẳng 1/1/0001 12:00:00 AM.

+26

Đó là bằng 'DateTime.MinValue', vì vậy bạn cũng có thể chỉ làm' DateTime mydate = DateTime .MinValue' là tốt:/ – Lloyd

+13

@Lloyd Hầu hết thời gian ... nhưng không phải là tham số mặc định DateTime.MinValue không phải là hằng số thời gian biên dịch - nhưng mặc định (DateTime)/new DateTime() là. – Ricibob

+7

Chỉ cần làm rõ nhận xét tuyệt vời của @ Ricibob, bởi vì điều quan trọng là: nếu bạn đang tạo một phương thức có tham số tùy chọn, bạn CHỈ có thể sử dụng 'default (DateTime)' hoặc 'new DateTime()'. Đó là cả hai * hằng số thời gian biên dịch *, bắt buộc đối với các giá trị tham số tùy chọn. Nếu không cần các hằng số thời gian biên dịch, thì 'default (DateTime)', 'new DateTime()', và 'DateTime.MinValue' có thể hoán đổi cho nhau. – leanne

Trả lời

139

Không, chúng giống hệt nhau.

default(), đối với bất kỳ loại giá trị nào (DateTime là loại giá trị) sẽ luôn gọi hàm tạo không tham số.

+22

FWIW; Trong C# 6, hành vi này sẽ thay đổi. C# 6 giới thiệu [constructor parameterless] (https://roslyn.codeplex.com/discussions/562559) cho các cấu trúc, cho phép hành vi của 'new' khác với những gì' default (T) 'sẽ làm. – vcsjones

+19

Người ta có thể lập luận rằng 'mặc định (DateTime)' là mô tả hơn về ý định của lập trình viên, do đó thuận lợi hơn thường. –

+8

@vcsjones này đã được gỡ bỏ trước khi phát hành cuối cùng của C# 6.0 tuy nhiên. – nawfal

13

Câu trả lời là không. Lưu ý rằng trong cả hai trường hợp, mdDate.Kind = DateTimeKind.Unspecified.

Do đó nó có thể là tốt hơn để làm như sau:

DateTime myDate = new DateTime(1, 1, 1, 0, 0, 0, DateTimeKind.Utc); 

Thuộc tính myDate.Kind là chỉ đọc, vì vậy nó không thể thay đổi sau khi các nhà xây dựng được gọi.

+2

làm thế nào để trả lời câu hỏi của OP? –

+32

Vui lòng xem 4 từ đầu tiên trong câu trả lời của tôi. –

+2

Tôi muốn tranh luận về điều này. 'DateTime' mặc định là hữu ích như một giá trị không được đặt giá trị, với một so sánh đơn giản với' default (DateTime) '. Việc sử dụng nào là giá trị '01/01/0001' không mặc định? – Rawling

16

Nếu bạn muốn sử dụng giá trị mặc định cho tham số DateTime trong một phương thức, bạn chỉ có thể sử dụng mặc định (DateTime).

Các dòng sau sẽ không biên dịch:

private void MyMethod(DateTime syncedTime = DateTime.MinValue) 

Dòng này sẽ biên dịch:

private void MyMethod(DateTime syncedTime = default(DateTime)) 
+0

Đó là câu trả lời tôi đang tìm kiếm. Cảm ơn! – GigaKatowice

+0

Tất nhiên DateTime.MinValue không biên dịch? Các tham số tùy chọn phải là hằng số biên dịch thời gian, mà MinValue thì không. mặc định (DateTime) và DateTime mới() đều hợp lệ mặc dù (thực sự là vui, vì const DateTime x = default (DateTime) không hợp lệ, vì các giá trị DateTime không thể được khai báo như hằng số biên dịch) –

Các vấn đề liên quan