C# 对象等于 int 不等于 true

本文关键字:不等于 true int 对象 | 更新日期: 2023-09-27 18:24:16

我有一个非常简单的if语句,但它总是返回false,而不是true。这是我的 if 语句

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

在比较它们之前,我是否需要将 objectValue 变量转换为 int?

C# 对象等于 int 不等于 true

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

object o = 4;
int i = 4;

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

问题不在于将int框在对象中 - 这工作得很好,因为您可以轻松地尝试自己。

只有当object实际上不包含int,而是包含不同的数值类型时,问题才会出现,例如 shortbyte - 在这种情况下,您必须首先将其拆箱为正确的类型(例如,(short)objectValue (,然后进行比较。取消装箱shortint结果InvalidCastException - 您必须将确切的类型与值类型一起使用。

此外,通常不需要为此使用Equals - 只需(int)objectValue == intValue左右即可。

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
}

使用TryParse()方法将是更安全的选择,即使您在 objectValue 中具有非 int 值。

是的,你需要投射它

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

如果没有强制转换,将执行类型比较,并且对象永远不会等于整数,这就是您获得 false 值的原因。