【问题标题】:cannot implicitly convert type System.DateTime? to System.DateTime不能隐式转换类型 System.DateTime?到 System.DateTime
【发布时间】:2012-01-13 10:18:39
【问题描述】:

当我执行以下操作时,我得到:

    inv.RSV = pid.RSVDate

我得到以下信息:不能隐式转换类型 System.DateTime?到 System.DateTime。

在这种情况下,inv.RSV 是 DateTime,pid.RSVDate 是 DateTime?

我尝试了以下方法,但没有成功:

 if (pid.RSVDate != null)
 {                

    inv.RSV = pid.RSVDate != null ? pid.RSVDate : (DateTime?)null;
 }

如果 pid.RSVDate 为空,我喜欢不为 inv.RSV 分配任何东西,在这种情况下它将为空。

【问题讨论】:

    标签: c# datetime


    【解决方案1】:

    日期时间不能为空。默认为DateTime.MinValue

    你想要做的是:

    if (pid.RSVDate.HasValue)
    {
        inv.RSV = pid.RSVDate.Value;
    }
    

    或者,更简洁:

    inv.RSV = pid.RSVDate ?? DateTime.MinValue;
    

    【讨论】:

    • inv.RSV 开始时为空。我怎么说不要更新它 pid.RSVDate 没有价值
    • @NatePet 你检查pid.RSVDate.HasValue。如果它没有赋值,那么HasValue 将返回false,在这种情况下你不会更新你的其他值。根据您的错误消息,inv.RSVDateTime,它不可能有空值。如果要为其分配 null,请将其类型更改为 DateTime? 为可空。
    • @NatePet,“inv.RSV 开始时为空”:你确定吗? DateTime 不能为空
    【解决方案2】:

    您需要使RSV 属性也可以为空,或者为RSVDate 为空的情况选择一个默认值。

    inv.RSV = pid.RSVDate ?? DateTime.MinValue;
    

    【讨论】:

      【解决方案3】:

      如果分配到 DateTime 的地址是 DateTime?,您可以使用

      int.RSV = pid.RSVDate.GetValueOrDefault();
      

      这支持允许您指定默认值的重载,如果 DateTime 的默认值不理想。

      如果 pid.RSVDate 为空,我不想分配 inv.RSV 任何 如果它将为空。

      int.RSV 不会为空,因为您已经说过它是DateTime,而不是可为空的类型。如果它从未由您分配,它将具有其类型的默认值,即DateTime.MinValue,或 0001 年 1 月 1 日。

      inv.RSV 开始时为空。我怎么说不要更新它 pid.RSVDate 没有价值

      同样,鉴于您对该物业的描述,这只是不可能。但是,如果一般来说,如果 pid.RSVDate 为 null 时您不想更新 inv.RSV(而且您只是混淆了自己的话),那么您只需在作业周围写一个 if 检查即可。

      if (pid.RSVDate != null)
      {
          inv.RSV = pid.RSVDate.Value;
      }
      

      【讨论】:

        【解决方案4】:

        因为 inv.RSV 不是可为空的字段,所以它不能为 NULL。当你初始化你的对象时,它是一个默认的 inv.RSV 到一个空的 DateTime,就像你说的那样

        inv.RSV = new DateTime()
        

        因此,如果您想将 inv.RSV 设置为 pid.RSV(如果它不为 NULL,或者默认 DateTime 值为 null,请执行以下操作:

        inv.RSV = pid.RSVDate.GetValueOrDefault()
        

        【讨论】:

          【解决方案5】:

          pid.RSVDate 有可能是null,而inv.RSV 没有,那么如果RSVDatenull 会发生什么?

          之前需要检查值是否为null-

          if(pid.RSVDate.HasValue)
              inv.RSV = pid.RSVDate.Value;
          

          但是如果 RSVDate 为空,inv.RSV 的值是多少?此属性是否总是会有约会?如果是这样,您可以使用 ?? 运算符来分配默认值。

          pid.RSV = pid.RSVDate ?? myDefaultDateTime;
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2023-01-18
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-05-28
            • 2023-03-15
            • 1970-01-01
            相关资源
            最近更新 更多