我有一个桌面应用,它使用序列化并在关闭之前保存数据,并使用以下代码从文件加载相同的数据:
IFormatter formatter = new BinaryFormatter();
var array = (MyClass[])formatter.Deserialize(stream);
MyClass有一个datime属性及其字段。我需要让它可以为空但我得到值不能为空。\ r \ nParameter name:value InnerException当我使它们都可以为空时。
public DateTime? MyDate
{
get
{
return myDate;
}
set
{
if (myDate != value)
{
myDate = value;
}
}
}
然后,我更新了我的代码如下
public DateTime? MyDate
{
get
{
return myDate;
}
set
{
if (value != null && myDate != value)
{
myDate = value;
}
}
}
反序列化过程中出现错误,如前所述。然后我必须使字段不可为空并改变属性,如下所示
public DateTime? MyDate
{
get
{
if (myDate == DateTime.MinValue)
{
return null;
}
else
{
return myDate;
}
}
set
{
if (myDate != value)
{
if (value == null)
{
myDate = DateTime.MinValue;
}
else
{
myDate = (DateTime)value;
}
onPropertyChanged("MyDate");
}
}
}
该解决方法按预期工作,但我不明白为什么第二个代码不适用于DateTime,而相同的代码适用于可为空的十进制属性。当它们具有null值时,字段和属性之间有什么区别?
答案 0 :(得分:0)
if (myDate != value)
{
myDate = value;
}
可能是你的问题,不是很确定,但是性能明智无论如何都不聪明,因为设置值需要的处理能力低于比较它。
为什么不这样做:
public DateTime? MyDate { get;set; }
如果能解决您的问题,请告诉我们!