不能隐式转换类型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任何东西这种情况下它将为空。
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
没有,那么如果RSVDate
是null
会发生什么呢?
您需要在-
之前检查值是否为nullif(pid.RSVDate.HasValue)
inv.RSV = pid.RSVDate.Value;
但是,如果RSVDate为空,inv.RSV的值将是什么?是否总是将是一个日期在这个属性?如果是这样,如果需要,可以使用??
操作符来赋值一个默认值。
pid.RSV = pid.RSVDate ?? myDefaultDateTime;