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

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

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

19

将其转换为 DateTime 类型?

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

6
您可以这样做:
pApproveDate = (Reader["ApproveDate"]==DBNull.Value)
  ? (DateTime?)null 
  : Convert.ToDateTime(Reader["ApproveDate"]);

自从ConvertToDateTime返回一个DateTime,条件运算符认为你正在返回不匹配的类型。

1
而且你需要这样做。这个问题已经在其他问题中讨论过了。 - Thorsten Dittmar

2

如果你使用普通的if语句而不是条件语句,会更简单,因为你不需要显式转换类型,而且更易读,在我看来。

DateTime? pApproveDate = null;

if (Reader["ApproveDate"] == DBNull.Value)
    pApproveDate = null;
else
    pApproveDate = Convert.ToDateTime(Reader["ApproveDate"]);

1
从lambda表达式返回的类型必须与分配值的变量类型相同。如果不是相同类型,则会出现编译错误,因为编译器会尝试放置一个隐式转换。
DateTime不是可空类型,因此您需要使其成为可空类型,或者使用不同的转换来处理DBNull值。

你在哪里看到Lambda表达式? - user2711965

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接