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

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

4

4 回答 4

19

将其转换为 DateTime?:

private DateTime? 
pApproveDate=null;
pApproveDate =(Reader["ApproveDate"]==DBNull.Value)?(DateTime?)null:       
    Convert.ToDateTime(Reader["ApproveDate"]);
于 2013-08-29T13:07:15.087 回答
6

你可以这样做:

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

由于ConvertToDateTime返回一个DateTime条件运算符认为您正在返回不匹配的类型。

于 2013-08-29T13:07:48.167 回答
2

如果您使用普通 if 语句而不是条件语句会更简单,您将不需要显式转换,并且IMO更具可读性

DateTime? pApproveDate = null;

if (Reader["ApproveDate"] == DBNull.Value)
    pApproveDate = null;
else
    pApproveDate = Convert.ToDateTime(Reader["ApproveDate"]);
于 2013-08-29T13:13:25.527 回答
1

从 lamda 表达式返回的类型必须与您分配值的变量类型相同。如果它不是同一类型,那么您将收到编译错误,因为编译器将尝试进行隐式转换。

DateTime 不是可空类型,因此您要么需要将其设为可空类型,要么对 DBNull 值使用不同的转换。

于 2013-08-29T13:11:27.433 回答