异常描述中有一个悖论:
可空对象必须有一个值(?!)
这就是问题:
我有一个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
object.
此消息的含义是什么?我做错了什么?
注意oldDTE
is not null
。我已经删除了Value
from myNewDT.MyDateTime
但由于生成的设置器而引发相同的异常。
你应该改变线路this.MyDateTime = myNewDT.MyDateTime.Value;
只是this.MyDateTime = myNewDT.MyDateTime;
您收到的异常被抛出在.Value
的财产Nullable DateTime
,因为需要返回一个DateTime
(因为这就是合同的目的.Value
州),但它不能这样做,因为没有DateTime
返回,因此它抛出异常。
一般来说,盲目调用是一个坏主意.Value
在可为 null 的类型上,除非您事先知道该变量MUST包含一个值(即通过.HasValue
查看)。
EDIT
这是代码DateTimeExtended
不会引发异常:
class DateTimeExtended
{
public DateTime? MyDateTime;
public int? otherdata;
public DateTimeExtended() { }
public DateTimeExtended(DateTimeExtended other)
{
this.MyDateTime = other.MyDateTime;
this.otherdata = other.otherdata;
}
}
我是这样测试的:
DateTimeExtended dt1 = new DateTimeExtended();
DateTimeExtended dt2 = new DateTimeExtended(dt1);
添加.Value
on other.MyDateTime
导致异常。删除它可以消除异常。我认为你找错地方了。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)