C#object equals int不等于true

时间:2014-09-24 10:30:31

标签: c#

我有一个非常简单的if语句但它总是返回false永远不会是真的。 这是我的if语句

if (objectValue.Equals(intValue))
{
    return true;
}
return false;

我需要在比较它们之前将objectValue变量强制转换为int吗?

4 个答案:

答案 0 :(得分:4)

由于Equals是一个虚方法,它将调用object子类的适当方法。在这种情况下int.Equals。在一个非常简单的例子中:

object o = 4;
int i = 4;

o.Equals(i)返回true。所以你的问题就在别的地方。也许objectValue不是int,而是byteshort或其他数字类型。

答案 1 :(得分:0)

问题不在于在对象中装入int - 这样可以正常工作,因为您可以轻松尝试自己。

问题仅在object实际上不包含int时出现,而是在不同的数字类型中出现,例如shortbyte - 在这种情况下,您必须首先将其拆分为正确的类型(例如,(short)objectValue),然后然后进行比较。将装箱short打包到int会产生InvalidCastException - 您必须使用带有值类型的确切类型。

此外,通常无需使用Equals - 只需执行(int)objectValue == intValue左右。

答案 2 :(得分:0)

int val;
if (int.TryParse(objectValue.ToString(), out val))
{
    if (val == intValue)
    {
        // return true;
    }
    else
    {
        //return false;
    }
}
else
{
    // value of obj is not int. you know here something is wrong
}

即使在objectValue中有非int值,使用TryParse()方法也会更安全。

答案 3 :(得分:-1)

是的,你需要施展它

return ((int)objectValue).Equals(intValue);

没有强制转换将执行类型比较,对象永远不会等于int,这就是为什么你得到false值。

相关问题