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

本文关键字:System DateTime 类型 转换 不能 | 更新日期: 2023-09-27 18:17:02

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

    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为空,我不喜欢赋给v。rsv任何东西这种情况下它将为空。

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

DateTime不能为空。默认为DateTime.MinValue

你要做的是:

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

或者更简洁地说:

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

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

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

因为inv.RSV不是一个可空字段,所以它不能为NULL。当你初始化你的对象时,它是一个默认的inv.RSV到一个空的DateTime,如果你输入

你会得到相同的结果
inv.RSV = new DateTime()

所以,如果你想设置inv.RSV为pid。如果RSV不为NULL,或者默认的DateTime值为NULL,则执行以下操作:

inv.RSV = pid.RSVDate.GetValueOrDefault()

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

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

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

如果pid。RSVDate是空的,我不喜欢给v。rsv赋值

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

发票。RSV一开始是空的。我怎么说不更新,如果没有值的pid。RSVDate

同样,考虑到您对属性的描述,这个简单的不能是。然而,如果一般来说,如果pid.RSVDate是空的,你不想更新inv.RSV(你只是混淆了你的话),那么你只需要在赋值周围写一个if检查。

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

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

您需要在-

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

但是,如果RSVDate为空,inv.RSV的值将是什么?是否总是将是一个日期在这个属性?如果是这样,如果需要,可以使用??操作符来赋值一个默认值。

pid.RSV = pid.RSVDate ?? myDefaultDateTime;