比较 .NET 中的不同数字类型(int、float、double...)

Pre*_*eli 5 c# comparison numeric

我有一个函数,它接受两个参数,如果它们相等则返回 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;
}
Run Code Online (Sandbox Code Playgroud)

现在我想扩展这个功能。如果 a 和 b 是 2 个相同的数字但类型不同,它也应该返回 true。

例如:

int a = 15;
double b = 15;
if (isequal(a,b)) //should be true; right now it's false
{ //...
}
Run Code Online (Sandbox Code Playgroud)

我已经找到了一个类似的问题(带有答案)比较 double 和 int 的最佳方法,但 a 和 b 可以是任何类型的数字或数字以外的其他数字。如何检查 a 和 b 是否是数字?我希望有一种比检查 .net 的所有现有数字类型(Int32、Int16、Int64、UInt32、Double、Decimal,...)更好的方法

// update:我设法编写了一个效果很好的方法。但是,十进制类型的数字可能存在一些问题(尚未测试)。但它适用于所有其他数字类型(包括大量 Int64 或 UInt64)。如果有人感兴趣:数字相等的代码

Don*_*ald 5

您可以在 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;
}
Run Code Online (Sandbox Code Playgroud)