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

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (11)

为什么这在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);

后一种形式给出了一个编译错误:"Type of conditional expression cannot be determined because there is no implicit conversion between '<null>' and 'System.DateTime'."

并不是说我不能使用前者,但是第二种样式更符合我代码的其余部分。

提问于
用户回答回答于

这个问题已经问了很多次了。编译器说它不知道如何转换null变成DateTime...

解决办法很简单:

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

请注意Nullable<DateTime>能写DateTime?这样就不用打字了。

用户回答回答于

我们有一个方便的操作符,用于可空类型,称为空合并运算符

??

像这样使用:

// Left hand is the nullable type, righthand is default if the type is null.
Nullable<DateTime> foo;
DateTime value = foo ?? new DateTime(0);

扫码关注云+社区