有人可以解释为什么这在C#.NET 2.0中有效:
Nullablefoo; if (true) foo = null; else foo = new DateTime(0);
......但这不是:
Nullablefoo; foo = true ? null : new DateTime(0);
后一种形式给我一个编译错误"无法确定条件表达式的类型,因为'
并不是说我不能使用前者,但第二种风格与我的其余代码更加一致.
这个问题已经被问过很多次了.编译器告诉你它不知道如何转换null
为DateTime
.
解决方案很简单:
DateTime? foo; foo = true ? (DateTime?)null : new DateTime(0);
请注意,Nullable
可以写入DateTime?
,这将节省您一堆打字.
FYI(Offtopic,但很漂亮并且与可空类型有关)我们有一个方便的运算符,仅用于可空类型,称为空合并运算符
??
像这样使用:
// Left hand is the nullable type, righthand is default if the type is null. Nullablefoo; DateTime value = foo ?? new DateTime(0);
这是因为在三元运算符中,这两个值必须解析为相同的类型.