有人可以解释为什么这在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’之间没有隐式转换。”
不是说我不能使用前一种样式,而是第二种样式与我的其余代码更加一致。
这个问题已经被问过很多遍了。编译器告诉您,它不知道如何转换null为DateTime。
null
DateTime
解决方案很简单:
DateTime? foo; foo = true ? (DateTime?)null : new DateTime(0);
请注意,Nullable<DateTime>可以编写代码DateTime?,这样可以节省大量打字时间。
Nullable<DateTime>
DateTime?