我有一个非常简单的if语句但它总是返回false永远不会是真的。 这是我的if语句
if (objectValue.Equals(intValue))
{
return true;
}
return false;
我需要在比较它们之前将objectValue变量强制转换为int吗?
答案 0 :(得分:4)
由于Equals
是一个虚方法,它将调用object
子类的适当方法。在这种情况下int.Equals
。在一个非常简单的例子中:
object o = 4;
int i = 4;
o.Equals(i)
返回true
。所以你的问题就在别的地方。也许objectValue不是int
,而是byte
,short
或其他数字类型。
答案 1 :(得分:0)
问题不在于在对象中装入int
- 这样可以正常工作,因为您可以轻松尝试自己。
问题仅在object
实际上不包含int
时出现,而是在不同的数字类型中出现,例如short
或byte
- 在这种情况下,您必须首先将其拆分为正确的类型(例如,(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值。