【发布时间】:2013-12-22 07:42:30
【问题描述】:
以下代码从给定的DataRow(modelValue) 中读取一条数据并将其解析为nullableDateTime 实例。
问题:请参阅L1 & L2 下的代码部分,其中两者在技术上是相等的(如果我没有犯任何小学生错误)。但是,L1 可以按预期工作,但L2 不能正常工作。我得到了
null 和 datetime 之间没有隐式转换
当我执行L2 下的代码时。有人可以给我建议吗?
DateTime? CallBack;
var callBackDate = modelValue["CallBack"] == DBNull.Value ? null : modelValue["CallBack"].ToString();
//Parsing
DateTime cdate;
if (!DateTime.TryParse(callBackDate, out cdate))
cdate = DateTime.MinValue;
//L1
if (cdate==DateTime.MinValue)
CallBack = null;
else
CallBack = cdate.Date;
//L2
CallBack = cdate == DateTime.MinValue?null:cdate.Date;
【问题讨论】:
-
这已经被很多人问过了,例如here。 IMO,仍然使用
?:的最干净的解决方法是... ? default(DateTime?) : ...。 -
编译器无法推断出表达式
cdate == DateTime.MinValue?null:cdate.Date应该返回DateTime?而不是DateTime(因为cdate.Date是DateTime)。因此,它尝试将 null 转换为DateTime... 并失败。
标签: c#