我有下面写的值的手表和下面写有访问者的属性。虽然值是盒装字符串并且它们的类型相同,并且字符串中的实际文本完全相同,但条件d.Value.Value != d.Value.DefaultValue
是true
。
我把手表放在下面,我对它们的价值感到惊讶。
internal object DefaultValue { get; set; } = null;
internal object _Value = null;
internal object Value
{
get
{
return _Value;
}
set
{
if (_Value != value)
{
_Value = value;
Changed?.Invoke(this, new SettingValueChangedEventArgs()
{
IsInitialization = FirstChangeIsInitialization
});
}
}
}
在_Value != value
上的断点被击中时观察值:
d.Value.Value != d.Value.DefaultValue
:是的d.Value.Value
:“无”(对象{string})d.Value.DefaultValue
:“无”(对象{string})"test"
:“测试”(字符串)((object)"test").GetType()
:object {string}d.Value.Value.GetType()
:object {string}d.Value.DefaultValue.GetType()
:object {string}d.Value.DefaultValue.Equals(d.Value.Value)
:是的我预计d.Value.Value != d.Value.DefaultValue
将不等于d.Value.DefaultValue.Equals(d.Value.Value)
,但它们是相同的。
我的工作代码:
internal object _Value = null;
internal object Value
{
get
{
return _Value;
}
set
{
if ((value == null && _Value != null) ||
(value != null && _Value == null) ||
(value != null && _Value != null && !_Value.Equals(value)))
{
_Value = value;
Changed?.Invoke(this, new SettingValueChangedEventArgs()
{
IsInitialization = FirstChangeIsInitialization
});
}
}
}