一尘不染

?的可空类型问题:条件运算符

c#

有人可以解释为什么这在C#.NET 2.0中有效:

    Nullable<DateTime> foo;
    if (true)
        foo = null;
    else
        foo = new DateTime(0);

…但这不是:

    Nullable<DateTime> foo;
    foo = true ? null : new DateTime(0);

后一种形式给我带来了一个编译错误“无法确定条件表达式的类型,因为’‘和’System.DateTime’之间没有隐式转换。”

不是说我不能使用前一种样式,而是第二种样式与我的其余代码更加一致。


阅读 211

收藏
2020-05-19

共1个答案

一尘不染

这个问题已经被问过很多遍了。编译器告诉您,它不知道如何转换nullDateTime

解决方案很简单:

DateTime? foo;
foo = true ? (DateTime?)null : new DateTime(0);

请注意,Nullable<DateTime>可以编写代码DateTime?,这样可以节省大量打字时间。

2020-05-19