2010-03-22 52 views
2

這種情況。我從DatePicker控件獲取日期:DatePicker的可空日期時間值

DateTime current = datePicker1.SelectedDate;

我得到一個錯誤:無法隱式轉換DateTime?到DateTime。所以我想這是一個可以空的類型DateTime ?.

它是安全的這種類型強制轉換爲類型,我需要這樣的:

if (datePicker1.SelectedDate == null) 
    current= DateTime.Now; 
else 
    current= (DateTime)datePicker1.SelectedDate; //or datePicker1.SelectedDate.Value 

而在一般情況下,當是安全的隱含轉換爲空的值,當它是不是?

回答

4

可空類型有這種想法的特殊屬性。它是HasValue,還有GetValueOrDefault。所以你真正需要的是

DateTimePicker1.SelectedDate.GetValueOrDefault(DateTime.Now); 

// or DateTime.MaxValue or whatever)

+0

感謝您的額外信息,它也很有用 – trnTash 2010-03-22 09:10:32

+0

非常感謝luckeyluke。 :) – IsmailS 2010-04-09 05:59:58

0

你並不需要轉換,以下

if (datePicker1.SelectedDate == null) 
    current= DateTime.Now; 
else 
    current= datePicker1.SelectedDate.Value; 

應該做

+0

根據MSND,datePicker1.SelectedDate.Value與(DateTime)datePicker1.SelectedDate相同。兩者都屬於明確的轉換 – trnTash 2010-03-22 09:01:10

0

如何

DateTime current = datePicker1.SelectedDate ?? DateTime.Now; 

4

在這種情況下,你應該使用null coalescing operator

current = datePicker1.SelectedDate ?? DateTime.Now; 

將使用SelectedDate如果它非空,或DateTime.Now否則。表達式的類型是不可空的,因爲最後一個操作數是。

在一般情況下,你應該使用Value屬性(或投射到非可空類型),如果你有信心值是在這一點上非空 - 所以,如果它空,它會拋出異常。 (如果你信心不對,應該有個例外。)空合併運算符通常意味着你不需要擔心這個問題。

+0

這工作。感謝您的快速回答! – trnTash 2010-03-22 09:02:37