当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《Nullable类型问题?:条件运算符》经验,为你挑选了3个好方法。

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

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

......但这不是:

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

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

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



1> Stewart John..:

这个问题已经被问过很多次了.编译器告诉你它不知道如何转换nullDateTime.

解决方案很简单:

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

请注意,Nullable可以写入DateTime?,这将节省您一堆打字.


我想补充一点,编译器试图猜测三元运算的结果类型,而不是通过查看它所分配的变量,而是通过查看操作数.它找到``和`DateTime`而不是找到共同的祖先类型,它只是试图找到彼此之间的转换.(额外位:C#识别``类型,即每个`null`表达式的类型.)

2> FlySwat..:

FYI(Offtopic,但很漂亮并且与可空类型有关)我们有一个方便的运算符,仅用于可空类型,称为空合并运算符

??

像这样使用:

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


这是如何回答他的问题的?
因此,FYI,offtopic但是一件好事要知道.
如果某些条件为真,Nick会尝试为foo分配null。如果foo为空,则空合并将为DateTime(0)赋值。两者是完全无关的。

3> MojoFilter..:

这是因为在三元运算符中,这两个值必须解析为相同的类型.


不,他们不必是同一类型.第二个操作数必须可以隐式转换为第三个操作数的类型,反之亦然.
推荐阅读
农大军乐团_697
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有