2011-12-01 39 views
8

Làm thế nào tôi có thể viếtChuyển đổi chuỗi DateTime biến nullable trong một dòng

string date = "12/2/2011"; 

DateTime? dt = date ?? DateTime.Parse(date); 

này ném một lỗi thời gian biên dịch. Tôi biết tôi có thể làm tryparse or do if {}. Có cách nào để làm điều này trong một dòng?

+1

Bạn có thêm dấu chấm hỏi ở đó. Nó phải là 'DateTime? dt = ngày? DateTime.Parse (ngày): null; ' – dasblinkenlight

+0

xin lỗi, chỉ cần chỉnh sửa câu hỏi cho đến nay ?? DateTime.Parse (ngày) từ ngày ?? null: DateTime.Parse (ngày) –

+2

Không, C# hỗ trợ ?? toán tử (được gọi là toán tử elvis trong Groovy). Nó trả về giá trị bên phải chỉ khi giá trị là null, nếu không trả về giá trị của chính nó. – everton

Trả lời

25

Hãy thử sử dụng conditional operator?: thay vì null-coalescing operator??:

DateTime? dt = date == null ? (DateTime?)null : DateTime.Parse(date); 

Bạn cũng cần phải cast null để DateTime? nếu không bạn sẽ nhận được một lỗi biên dịch.

1
string date = "12/2/2011"; 
date = Convert.ToDateTime(date); 
3
string date = "12/2/2011"; 

DateTime? dt = String.IsNullOrEmpty(date) ? (DateTime?)null : DateTime.Parse(date); 
2

Giải pháp này không chỉ gán null đến DateTime nullable dt khi chuỗi datenull hoặc một chuỗi rỗng, nhưng cũng có khi nó chứa một đại diện ngày hợp lệ:

string date = null; // or "01/02/2011" 
DateTime? dt; 

DateTime temp; 
if (DateTime.TryParse(date, out temp)) { 
    dt = temp; 
} else { 
    dt = null; 
} 

Các câu lệnh if-else có thể được thay thế bằng một biểu thức bậc ba dòng, tuy nhiên không phải khai báo là temp:

DateTime temp; 
dt = DateTime.TryParse(date, out temp) ? temp : (DateTime?)null; 
+0

Downvoter hãy bình luận. Có gì sai với giải pháp của tôi? Nó sẽ không chỉ phát hiện khi ngày là null, mà còn khi nó không chứa một chuỗi ngày hợp lệ. Cũng lưu ý rằng dt là nullable. –

+0

Tôi chỉ thấy không có lý do gì cho câu lệnh 'else' của bạn, vì dt là null ngay từ đầu. – everton

+0

@EvertonAgner: Chỉ khi 'dt' là biến thành viên, nhưng không phải nếu nó là biến cục bộ. Từ ví dụ được đưa ra trong câu hỏi, tôi không thấy, liệu 'dt' được định nghĩa trong một lớp hay trong một phương thức. –

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