可空对象必须具有值。

266

异常描述存在悖论:

可空对象必须具有值(?!)

问题如下:

我有一个名为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 不是 null。我已从 myNewDT.MyDateTime 中删除了 Value,但由于生成的 setter,仍会抛出相同的异常。


其他构造函数是什么? - Paul Creasey
它是通过不带参数的new()构造的,然后我添加了值(它可以工作)。 - Dani
@Yuliy - 如果我先尝试设置otherdata字段,我会得到相同的异常。 - Dani
@Yuliy - 我在一个新项目中运行了这段代码,它像你说的那样工作。我正在努力弄清楚出了什么问题... - Dani
6
问题已解决 - 问题原本并不存在...实际上是在对otherdata和MyDateTime生成了setter时,对值进行了检查。当该值为null时,它就会失效! - Dani
显示剩余3条评论
11个回答

0
我在使用EF Core 7.x时遇到了这个异常:
System.InvalidOperationException: 可空对象必须有一个值。
使用的代码如下:
Updated = new[] { x.Updated, x.Threats.Max(tac => tac.Updated) }.Max()

new[] 改为 List<DateTime?>,然后它就可以工作了。
Updated = new List<DateTime?> { x.Updated, x.Threats.Max(tac => tac.Updated) }.Max()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接