不能隐式转换类型System.DateTime?到System.DateTime

时间:2011-12-05 17:27:55

标签: c# datetime

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

    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为null,我喜欢不分配inv.RSV任何东西,在这种情况下它将为null。

5 个答案:

答案 0 :(得分:16)

DateTime不能为空。它的默认值为DateTime.MinValue

您想要做的是以下内容:

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

或者,更简洁:

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

答案 1 :(得分:8)

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

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

答案 2 :(得分:2)

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

inv.RSV = new DateTime()

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

inv.RSV = pid.RSVDate.GetValueOrDefault()

答案 3 :(得分:1)

如果被分配为DateTime而被分配的是DateTime?,则可以使用

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

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

  

如果pid.RSVDate为null,我不想在其中分配inv.RSV   case它将为null。

int.RSV不会为空,因为您已经说过它是DateTime,而不是可以为空的类型。如果它从未被您指定,则它将具有默认值类型,即DateTime.MinValue或1月1日。

  

inv.RSV开头为null。我怎么说不更新它没有pid.RSVDate

的值

同样,根据您对属性的描述,这只是不能。但是,如果一般来说,如果inv.RSV为空,您不想更新pid.RSVDate(并且您的语言只是混淆了),那么您只需编写if项检查在任务周围。

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

答案 4 :(得分:0)

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

您需要在 -

之前检查值是否为空
if(pid.RSVDate.HasValue)
    inv.RSV = pid.RSVDate.Value;

但是如果RSVDate为null,inv.RSV的值是多少? 总是是否会成为此酒店的约会对象?如果是这样,您可以使用??运算符指定默认值。

pid.RSV = pid.RSVDate ?? myDefaultDateTime;