сравнивать разные числовые типы (int, float, double, ...) в .NET - PullRequest
3 голосов
/ 24 августа 2011

У меня есть функция, которая принимает два параметра и возвращает 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;
}

Теперь я хочу расширить эту функцию. Он также должен возвращать true, если a и b - 2 равных числа, но разного типа.

Например:

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

Я уже нашел похожий вопрос (с ответом) лучший способ сравнить double и int , но a и b могут быть любым типом числа или чем-то другим, кроме чисел. Как я могу проверить, являются ли это a и b числовыми вообще? Я надеюсь, что есть лучший способ, чем проверка всех существующих числовых типов .net (Int32, Int16, Int64, UInt32, Double, Decimal, ...)

// update : Мне удалось написать метод, который работает довольно хорошо. Однако могут быть некоторые проблемы с числами десятичного типа (еще не проверял). Но это работает для любого другого числового типа (включая большие числа Int64 или UInt64). Если кому-то интересно: код для равенства чисел

Ответы [ 2 ]

3 голосов
/ 24 августа 2011

Вы можете использовать Double.TryParse как a, так и b. Он будет обрабатывать 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;
}
0 голосов
/ 24 августа 2011

попробуйте

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;
}
...