比较ChangeType不起作用后的值

时间:2015-03-09 09:37:21

标签: c# if-statement integer comparison changetype

我遇到的问题是,在更改类型(在本例中为int)后比较值不起作用:

enter image description here

在我看来(参见调试器),_pkValue_defaultValue都是integers,具有相同的值。

问题是,不应输入if语句,因为两个值均为0

我确定这是一件非常简单的事情,但我无法弄清楚。

编辑:代码

object pkVal = pks.First().Value.GetValue(this, null);

if (pkVal != null)
{
    var defaultValue = TypeHelper.GetDefaultValue(pkVal.GetType());

    var _pkValue = Convert.ChangeType(pkVal, pkVal.GetType());
    var _defaultValue = Convert.ChangeType(defaultValue, pkVal.GetType());

    if (_pkValue != _defaultValue)
    {
        canset = false;
    }
}

object pkVal = pks.First().Value.GetValue(this, null);

if (pkVal != null)
{
    var defaultValue = Simplic.TypeHelper.GetDefaultValue(pks.First().Value.PropertyType);

    if (!pkVal.Equals(defaultValue))
    {
        canset = false;
    }
}

谢谢!

1 个答案:

答案 0 :(得分:2)

您的问题是,_pkValue_defaultValue不是整数,而是boxed

变量的静态类型是object,这意味着您的!=运算符正在检查引用相等性,而不是比较盒装的整数值。

您可以使用多态Equals方法检查值的相等性:

if (!_pkValue.Equals(_defaultValue))
{
    canset = false;
}