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

问题描述 投票:0回答:1

我有下面写的值的手表和下面写有访问者的属性。虽然值是盒装字符串并且它们的类型相同,并且字符串中的实际文本完全相同,但条件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():object {string}
  6. d.Value.Value.GetType():object {string}
  7. d.Value.DefaultValue.GetType():object {string}
  8. d.Value.DefaultValue.Equals(d.Value.Value):是的

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

c# boxing unboxing
1个回答
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
            });
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.