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

时间:2019-04-30 03:46:36

标签: c# boxing unboxing

我有手表,其值写在下面,一个属性,其访问器写在下面。尽管这些值是带框的字符串,并且它们的类型相同,并且字符串中的实际文本完全相同,但条件d.Value.Value != d.Value.DefaultValuetrue

我把手表放在下面,我对它们的价值感到惊讶。

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上的断点时的值:

  1. d.Value.Value != d.Value.DefaultValue:是
  2. d.Value.Value:“无”(对象{string})
  3. d.Value.DefaultValue:“无”(对象{string})
  4. "test":“测试”(字符串)
  5. ((object)"test").GetType():对象{string}
  6. d.Value.Value.GetType():对象{string}
  7. d.Value.DefaultValue.GetType():对象{string}
  8. d.Value.DefaultValue.Equals(d.Value.Value):是

我希望d.Value.Value != d.Value.DefaultValue不等于d.Value.DefaultValue.Equals(d.Value.Value),但它们是相同的。

1 个答案:

答案 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
            });
        }
    }
}