[英]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.