Nullable类型问题?:条件运算符

有人可以解释为什么这在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);

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


并不是说我不能使用前者,但第二种风格与我的其余代码更加一致。


有只小跳蛙
浏览 311回答 3
3回答

拉风的咖菲猫

这个问题已经被问过很多次了。编译器告诉你它不知道如何转换null为DateTime。解决方案很简单:DateTime? foo;foo = true ? (DateTime?)null : new DateTime(0);请注意,Nullable<DateTime>可以写入DateTime?,这将节省您一堆打字。

翻阅古今

FYI(Offtopic,但很漂亮并且与可空类型有关)我们有一个方便的运算符,仅用于可空类型,称为空合并运算符??像这样使用:// Left hand is the nullable type, righthand is default if the type is null.Nullable<DateTime> foo;DateTime value = foo ?? new DateTime(0);

慕哥6287543

类似于接受的另一个解决方案是使用C#的default关键字。虽然使用泛型定义,但它实际上适用于任何类型。应用于OP问题的示例用法:Nullable<DateTime> foo;foo = true ? default(DateTime) : new DateTime(0);使用当前接受的答案的示例用法:DateTime? foo;foo = true ? default(DateTime) : new DateTime(0);此外,通过使用default,您不需要指定变量nullable,以便为其赋值null。编译器将自动分配特定变量类型的默认值,不会遇到任何错误。例:DateTime foo;foo = true ? default(DateTime) : new DateTime(0);
打开App,查看更多内容
随时随地看视频慕课网APP