C# 如何比较两个装箱变量(不知道它们是否可以转换为另一个的类型,或者它们是值类型还是引用类型)?

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 {

我有下面写有值的手表和下面写有访问器的属性。虽然这些值是装箱字符串,并且它们的类型相同,并且字符串中的实际文本完全相同,但条件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!=值被命中:

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通过较少的空检查获得相同的结果。