繁体   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