[英]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)?
I have the watches with the values written below and a property with the accessors written below. 我有手表,上面写着值,下面是属性,上面写着存取器。 Although the values are boxed strings and their types are the same, and the actual text in the strings is exactly the same, the condition
d.Value.Value != d.Value.DefaultValue
is true
. 尽管这些值是带框的字符串,并且它们的类型相同,并且字符串中的实际文本完全相同,但条件
d.Value.Value != d.Value.DefaultValue
为true
。
I have put the watches below and I was simply surprised by their values. 我把手表放在下面,它们的价值让我感到惊讶。
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
});
}
}
}
Watches values when the breakpoint on _Value != value
was hit: 命中
_Value != value
的断点时_Value != value
:
d.Value.Value != d.Value.DefaultValue
: true d.Value.Value != d.Value.DefaultValue
:true d.Value.Value
: "None" (object {string}) d.Value.Value
:“无”(对象{string}) d.Value.DefaultValue
: "None" (object {string}) d.Value.DefaultValue
:“无”(对象{string}) "test"
: "test" (string) "test"
:“ test”(字符串) ((object)"test").GetType()
: object {string} ((object)"test").GetType()
:对象{string} d.Value.Value.GetType()
: object {string} d.Value.Value.GetType()
:对象{string} d.Value.DefaultValue.GetType()
: object {string} d.Value.DefaultValue.GetType()
:对象{string} d.Value.DefaultValue.Equals(d.Value.Value)
: true d.Value.DefaultValue.Equals(d.Value.Value)
:true I expected that d.Value.Value != d.Value.DefaultValue
will not be equal to d.Value.DefaultValue.Equals(d.Value.Value)
, but they are the same. 我期望
d.Value.Value != d.Value.DefaultValue
将不等于d.Value.DefaultValue.Equals(d.Value.Value)
,但是它们是相同的。
My working code: 我的工作代码:
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
});
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.