在异常描述中有一个悖论: 可空对象必须有值(?!)

这就是问题所在:

我有一个DateTimeExtended类, 有

{
  DateTime? MyDataTime;
  int? otherdata;

}

和构造函数

DateTimeExtended(DateTimeExtended myNewDT)
{
   this.MyDateTime = myNewDT.MyDateTime.Value;
   this.otherdata = myNewDT.otherdata;
}

运行这段代码

DateTimeExtended res = new DateTimeExtended(oldDTE);

抛出一个带有消息的InvalidOperationException:

可空对象必须有一个值。

myNewDT.MyDateTime.Value -有效,包含一个常规的DateTime对象。

这条信息的含义是什么?我做错了什么?

注意,oldDTE不是空的。我已经从myNewDT中删除了值。MyDateTime,但由于生成的setter而抛出相同的异常。


当前回答

直接分配成员,不需要.Value部分:

DateTimeExtended(DateTimeExtended myNewDT)
{
   this.MyDateTime = myNewDT.MyDateTime;
   this.otherdata = myNewDT.otherdata;
}

其他回答

我得到了这个解决方案,它对我很有效

if (myNewDT.MyDateTime == null)
{
   myNewDT.MyDateTime = DateTime.Now();
}

尝试删除.value

DateTimeExtended(DateTimeExtended myNewDT)
{
   this.MyDateTime = myNewDT.MyDateTime;
   this.otherdata = myNewDT.otherdata;
}

直接分配成员,不需要.Value部分:

DateTimeExtended(DateTimeExtended myNewDT)
{
   this.MyDateTime = myNewDT.MyDateTime;
   this.otherdata = myNewDT.otherdata;
}

当我试图访问空值对象的值时,我得到了这条消息。

sName = myObj.Name;

这将产生错误。首先你应该检查对象是否为空

if(myObj != null)
  sName = myObj.Name;

这个作品。

看起来像老古董。MyDateTime为空,所以构造函数试图取它的值-抛出。