为什么条件运算符没有正确地允许使用"null"来赋值为可空类型?

Dan*_*man 8 .net c# nullable conditional-operator

可能的重复:
可空类型和三元运算符.为什么这不起作用?
具有可空<value>类型的条件运算符赋值?

这将无法编译,说明"无法确定条件表达式的类型,因为'System.DateTime'和''"之间没有隐式转换

task.ActualEndDate = TextBoxActualEndDate.Text != "" ? DateTime.Parse(TextBoxActualEndDate.Text) : null;
Run Code Online (Sandbox Code Playgroud)

这很好用

 if (TextBoxActualEndDate.Text != "")
    task.ActualEndDate = DateTime.Parse(TextBoxActualEndDate.Text);
else
    task.ActualEndDate = null;
Run Code Online (Sandbox Code Playgroud)

SLa*_*aks 8

这不起作用,因为编译器不会立即在两端插入隐式转换,并且null需要隐式转换才能成为可空类型.

相反,你可以写

task.ActualEndDate = TextBoxActualEndDate.Text != "" ? 
    DateTime.Parse(TextBoxActualEndDate.Text) : new DateTime?();
Run Code Online (Sandbox Code Playgroud)

这只需要一次隐式转换(DateTimeto DateTime?).

或者,您可以投射左侧:

task.ActualEndDate = TextBoxActualEndDate.Text != "" ? 
    (DateTime?)DateTime.Parse(TextBoxActualEndDate.Text) : null;
Run Code Online (Sandbox Code Playgroud)

这也只需要一次隐式转换.

  • 是的,但这不是我的代码. (2认同)
  • 验证发生在此解析之前的几个地方,当我尝试将DateTime.Min插入数据库时​​,我宁愿现在而不是一个例外. (2认同)