我有手表,其值写在下面,一个属性,其访问器写在下面。尽管这些值是带框的字符串,并且它们的类型相同,并且字符串中的实际文本完全相同,但条件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()
:对象{string} d.Value.Value.GetType()
:对象{string} d.Value.DefaultValue.GetType()
:对象{string} d.Value.DefaultValue.Equals(d.Value.Value)
:是我希望d.Value.Value != d.Value.DefaultValue
不等于d.Value.DefaultValue.Equals(d.Value.Value)
,但它们是相同的。
答案 0 :(得分:1)
我的工作代码:
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
});
}
}
}