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