如何比较两个装箱变量(不知道它们是否都可以转换为对方的类型,或者它们是值类型还是引用类型)?
How to compare two boxed variables (not knowing if they each can be casted to the other's type, or whether they are value or reference types)?
我的手表的值写在下面,属性 的访问器写在下面。虽然这些值都是带框的字符串并且它们的类型相同,并且字符串中的实际文本完全相同,但是条件 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
: "None" (对象 {string})
d.Value.DefaultValue
: "None" (对象 {string})
"test"
: "test" (字符串)
((object)"test").GetType()
:对象{字符串}
d.Value.Value.GetType()
:对象{字符串}
d.Value.DefaultValue.GetType()
:对象{字符串}
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
});
}
}
}
我的手表的值写在下面,属性 的访问器写在下面。虽然这些值都是带框的字符串并且它们的类型相同,并且字符串中的实际文本完全相同,但是条件 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
: "None" (对象 {string})d.Value.DefaultValue
: "None" (对象 {string})"test"
: "test" (字符串)((object)"test").GetType()
:对象{字符串}d.Value.Value.GetType()
:对象{字符串}d.Value.DefaultValue.GetType()
:对象{字符串}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
});
}
}
}