private DateTime? pApproveDate=null;
pApproveDate =(Reader["ApproveDate"]==DBNull.Value)?null: Convert.ToDateTime(Reader["ApproveDate"]);
上面的代码在编译期间产生以下错误 - 无法确定条件表达式的类型,因为''和'System.DateTime'之间没有隐式转换
答案 0 :(得分:18)
将它投射到DateTime?:
private DateTime?
pApproveDate=null;
pApproveDate =(Reader["ApproveDate"]==DBNull.Value)?(DateTime?)null:
Convert.ToDateTime(Reader["ApproveDate"]);
答案 1 :(得分:6)
你可以这样做:
pApproveDate = (Reader["ApproveDate"]==DBNull.Value)
? (DateTime?)null
: Convert.ToDateTime(Reader["ApproveDate"]);
由于ConvertToDateTime
返回DateTime
,条件运算符会认为您返回的是不匹配的类型。
答案 2 :(得分:2)
如果你使用普通的if语句而不是条件语句会更简单,你将不需要显式强制转换它会更具可读性 IMO
DateTime? pApproveDate = null;
if (Reader["ApproveDate"] == DBNull.Value)
pApproveDate = null;
else
pApproveDate = Convert.ToDateTime(Reader["ApproveDate"]);
答案 3 :(得分:1)
从lamda表达式返回的类型必须与要为其赋值的变量类型相同。如果它不是同一类型,那么你将得到一个compliation错误,因为编译器会尝试进行隐式转换。
DateTime不是可空类型,因此您需要将其设置为可空类型,或者对DBNull值使用不同的转换。