C# 来自DatePicker的可为空的datetime值
事实就是这样。我从DatePicker控件获取日期: DateTime current=datePicker1.SelectedDate 我得到一个错误:不能隐式转换DateTime?更新时间。所以我想这取决于一个可为空的类型DateTime 将此类型转换为我需要的类型是否安全,如下所示:C# 来自DatePicker的可为空的datetime值,c#,nullable,C#,Nullable,事实就是这样。我从DatePicker控件获取日期: DateTime current=datePicker1.SelectedDate 我得到一个错误:不能隐式转换DateTime?更新时间。所以我想这取决于一个可为空的类型DateTime 将此类型转换为我需要的类型是否安全,如下所示: if (datePicker1.SelectedDate == null) current= DateTime.Now; else current= (DateTime)datePicker1
if (datePicker1.SelectedDate == null)
current= DateTime.Now;
else
current= (DateTime)datePicker1.SelectedDate; //or datePicker1.SelectedDate.Value
一般来说,隐式强制转换可为null的值何时安全,何时不安全?您不需要强制转换,下面是
if (datePicker1.SelectedDate == null)
current= DateTime.Now;
else
current= datePicker1.SelectedDate.Value;
该怎么办呢
DateTime current = datePicker1.SelectedDate ?? DateTime.Now;
?在这种情况下,您应该使用: 如果非空,则使用
SelectedDate
,否则使用DateTime。表达式的类型不可为null,因为最后一个操作数为
一般来说,如果您确信该值在该点上不为null,则应该使用Value
属性(或强制转换为不可为null的类型),这样,如果该值为null,它将抛出异常。(如果您认为信心放错了位置,则可以使用一个异常。)但通常情况下,空合并运算符意味着您不必担心这一点。可空类型对于这种类型有一个特殊的属性。它是HasValue,而且是GetValueOrDefault。所以你真正需要的是
DateTimePicker1.SelectedDate.GetValueOrDefault(DateTime.Now);
//或DateTime.MaxValue或任何内容)
根据MSND,datePicker1.SelectedDate.Value与(DateTime)datePicker1.SelectedDate相同。两者都属于显式转换
DateTimePicker1.SelectedDate.GetValueOrDefault(DateTime.Now);