C# 如何比较两个装箱变量(不知道它们是否可以转换为另一个的类型,或者它们是值类型还是引用类型)?
我有下面写有值的手表和下面写有访问器的属性。虽然这些值是装箱字符串,并且它们的类型相同,并且字符串中的实际文本完全相同,但条件d.Value.Value!=d、 Value.DefaultValue为true 我把手表放在下面,我只是对它们的价值感到惊讶C# 如何比较两个装箱变量(不知道它们是否可以转换为另一个的类型,或者它们是值类型还是引用类型)?,c#,boxing,unboxing,C#,Boxing,Unboxing,我有下面写有值的手表和下面写有访问器的属性。虽然这些值是装箱字符串,并且它们的类型相同,并且字符串中的实际文本完全相同,但条件d.Value.Value!=d、 Value.DefaultValue为true 我把手表放在下面,我只是对它们的价值感到惊讶 internal object DefaultValue { get; set; } = null; internal object _Value = null; internal object Value { get {
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!=值被命中:
d、 价值,价值!=d、 Value.DefaultValue:true
d、 Value.Value:None对象{string}
d、 Value.DefaultValue:无对象{string}
测试:测试字符串
objecttest.GetType:对象{string}
d、 Value.Value.GetType:对象{string}
d、 Value.DefaultValue.GetType:对象{string}
d、 Value.DefaultValue.Equalsd.Value.Value:true
我以为是d.Value.Value!=d、 Value.DefaultValue将不等于d.Value.DefaultValue.Equalsd.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
});
}
}
}
显然,这是可行的,但是您可以使用static方法object.Equals_Value,Value通过较少的空检查获得相同的结果。