2011-12-01 61 views
8

如何我寫字符串轉換爲DateTime的可空變量在一行

string date = "12/2/2011"; 

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

,這將引發一個編譯時錯誤。我知道我可以做tryparse or do if {}。有沒有辦法在一行中做到這一點?

+1

那裏有一個額外的問號。它應該是'DateTime? dt =日期? DateTime.Parse(date):null;' – dasblinkenlight

+0

對不起,剛纔編輯過這個問題? DateTime.Parse(日期)從日期? null:DateTime.Parse(date) –

+2

不,C#支持?? (在Groovy中稱爲elvis操作符)。它只在值爲空時返回右側值,否則返回值本身。 – everton

回答

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

該溶液不僅分配null到可空的DateTime dt當字符串datenull或空字符串,而且當它包含一個無效的日期表示:

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

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

的if-else語句可以用一行三元表達式替換,但不是temp的聲明:

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

Downvoter請評論。我的解決方案有什麼問題?它不僅會檢測日期爲空時,還會在不包含有效日期字符串時檢測到。還要注意,dt是可空的。 –

+0

我只是看不到你的'else'語句,因爲dt從一開始就是空的。 – everton

+0

@EvertonAgner:只有'dt'是一個成員變量,但不是如果它是一個局部變量。從問題中給出的例子,我沒有看到,dt是在類中還是在方法中定義的。 –