'<null>'和'System.DateTime'错误</null>之间的隐式转换

时间:2013-08-29 13:05:23

标签: c#

private DateTime? pApproveDate=null;
pApproveDate =(Reader["ApproveDate"]==DBNull.Value)?null: Convert.ToDateTime(Reader["ApproveDate"]);

上面的代码在编译期间产生以下错误 - 无法确定条件表达式的类型,因为''和'System.DateTime'之间没有隐式转换

4 个答案:

答案 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值使用不同的转换。