Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 来自DatePicker的可为空的datetime值_C#_Nullable - Fatal编程技术网

C# 来自DatePicker的可为空的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

事实就是这样。我从DatePicker控件获取日期:

DateTime current=datePicker1.SelectedDate

我得到一个错误:不能隐式转换DateTime?更新时间。所以我想这取决于一个可为空的类型DateTime

将此类型转换为我需要的类型是否安全,如下所示:

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);