我有一个带两个参数的函数,如果它们相等则返回true;如果不相等则返回false:
private bool isequal(object a, object b)
{
if (a != null)
return a.Equals(b);
if (b != null)
return b.Equals(a);
//if (a == null && b == null)
return true;
}
现在我想扩展这个功能。如果a和b是2个相等但不同类型的数字,它也应该返回true。
例如:
int a = 15;
double b = 15;
if (isequal(a,b)) //should be true; right now it's false
{ //...
}
我已经找到了一个类似的问题(带答案)best way to compare double and int但是a和b可以是任何类型的数字或其他数字而不是数字。如何检查a和b是否为数字?我希望有一种比检查.net(Int32,Int16,Int64,UInt32,Double,Decimal,...)的所有现有数值类型更好的方法
// 更新:我设法写了一个效果很好的方法。但是,十进制类型的数字可能存在一些问题(尚未测试)。但它适用于所有其他数字类型(包括大量的Int64或UInt64)。如果有人感兴趣:code for number equality
答案 0 :(得分:3)
您可以在a和b上使用Double.TryParse。它将处理int,long等。
private bool isequal(object a, object b)
{
if (a == null || b == null)
return (a == b);
double da, db;
if (Double.TryParse(a.ToString(), out da) && Double.TryParse(b.ToString(), out db))
return YourIsDoubleEqualEnough(da, db);
return false;
}
答案 1 :(得分:0)
试试这个
private bool isequal(object a, object b)
{
int c,d;
if (int.TryParse(a.ToString(), out c) && int.TryParse(b.ToString(), out d))
{
if (c == d)
return true;
}
if (a != null)
return a.Equals(b);
if (b != null)
return b.Equals(a);
//if (a == null && b == null)
return true;
}