簡體   English   中英

DatePicker的可空日期時間值

[英]Nullable datetime value from 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

一般來說,什么時候隱式地施放可以為空的值是安全的,什么時候不是?

在這種情況下,您應該使用null合並運算符

current = datePicker1.SelectedDate ?? DateTime.Now;

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

通常,如果您確信該值在該點處為非null,則應使用Value屬性(或強制轉換為非可空類型) - 因此,如果它 null,則會拋出異常。 (如果你的信心是錯誤的,那么一個例外是合適的。)通常,空合並運算符意味着你不需要擔心這一點。

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

DateTimePicker1.SelectedDate.GetValueOrDefault(DateTime.Now);

// or DateTime.MaxValue or whatever)

你不需要施放,以下內容

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

應該做

怎么樣

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM