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?
由于Equals
是一个虚方法,它将调用object
子类的适当方法。在这种情况下int.Equals
.在一个非常简单的例子中:
object o = 4;
int i = 4;
o.Equals(i)
返回true
.所以你的问题在别的地方。也许 objectValue 不是一个int
,而是一个byte
、short
或其他数值类型。
问题不在于将int
框在对象中 - 这工作得很好,因为您可以轻松地尝试自己。
只有当object
实际上不包含int
,而是包含不同的数值类型时,问题才会出现,例如 short
或byte
- 在这种情况下,您必须首先将其拆箱为正确的类型(例如,(short)objectValue
(,然后进行比较。取消装箱short
以int
结果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 值的原因。