以下代码从给定DataRow
(modelValue)读取一个数据并将其解析为nullable
DateTime
实例.
问题:请查看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;
dcastro.. 27
(Z) ? X : Y
三元运算符要求从第二个操作数(X)到第三个操作数(Y)或从Y到X存在隐式转换.
由于null
不能被隐式转换为DateTime
,也不DateTime
到null
,表达不能被评价.更多相关内容:Eric Lippert的类型推断问题.
你要投null
给DateTime?
.通过这样做,X将是类型DateTime?
,Y将是类型DateTime
.由于存在从DateTime
to 的隐式转换DateTime?
,因此可以计算表达式,并且它将返回type的值DateTime?
.
或者,按照相同的逻辑,您也可以将第三个操作数Y转换为DateTime?
.
(Z) ? X : Y
三元运算符要求从第二个操作数(X)到第三个操作数(Y)或从Y到X存在隐式转换.
由于null
不能被隐式转换为DateTime
,也不DateTime
到null
,表达不能被评价.更多相关内容:Eric Lippert的类型推断问题.
你要投null
给DateTime?
.通过这样做,X将是类型DateTime?
,Y将是类型DateTime
.由于存在从DateTime
to 的隐式转换DateTime?
,因此可以计算表达式,并且它将返回type的值DateTime?
.
或者,按照相同的逻辑,您也可以将第三个操作数Y转换为DateTime?
.
您需要告诉编译器将null视为DateTime?
。否则,编译器将不知道是什么类型null
。
CallBack = cdate == DateTime.MinValue ? (DateTime?)null : cdate.Date;