【问题标题】:implicit conversion between '<null>' and 'System.DateTime' error'<null>' 和 'System.DateTime' 错误之间的隐式转换
【发布时间】:2013-09-01 22:34:28
【问题描述】:
private DateTime? pApproveDate=null;
pApproveDate =(Reader["ApproveDate"]==DBNull.Value)?null: Convert.ToDateTime(Reader["ApproveDate"]);

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

【问题讨论】:

    标签: c#


    【解决方案1】:

    将其转换为 DateTime?:

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

    【讨论】:

      【解决方案2】:

      你可以这样做:

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

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

      【讨论】:

      • 你需要。这已经在其他问题中讨论过了。
      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

        • 你在哪里看到 lambda 表达式?
        猜你喜欢
        • 2012-03-13
        • 2023-03-17
        • 1970-01-01
        • 2018-03-14
        • 2012-01-13
        • 2013-12-22
        • 2015-07-14
        • 1970-01-01
        • 2019-03-04
        相关资源
        最近更新 更多