Есть ли способ узнать, является ли двойное число реальным числом в С#?

Итак, есть метод для NaN, но деление на ноль создает бесконечность или отрицательную бесконечность.

Существует метод бесконечности (также положительной бесконечности и отрицательной бесконечности).

Мне нужна функция IsARealNumber, которая возвращает true, когда значение является выражаемым числом.

Очевидно, я могу написать свой собственный...

public bool IsARealNumber(double test)
{
    if (double.IsNaN(test)) return false;
    if (double.IsInfinity(test)) return false;
    return true;
}

но не похоже, что я должен.


person Joel Barsotti    schedule 19.01.2010    source источник
comment
Мне это кажется довольно простым: return !double.IsNaN(test) && !double.IsInfinity(test); // В фреймворке 3.5 вы даже можете сделать его методом расширения.   -  person GalacticCowboy    schedule 20.01.2010
comment
И теперь, когда вы это написали, вам больше никогда не придется это писать :-)   -  person paxdiablo    schedule 20.01.2010
comment
не кажется, что он должен быть там? @GalacticCowboy, я только что заметил методы расширения, как мне их добавить?   -  person Joel Barsotti    schedule 20.01.2010


Ответы (1)


Чтобы добавить его в качестве метода расширения, он должен быть статическим членом статического класса.

public static class ExtensionMethods
{
    public static bool IsARealNumber(this double test)
    {
        return !double.IsNaN(test) && !double.IsInfinity(test);
    }
}
person GalacticCowboy    schedule 20.01.2010
comment
Прав ли я, предполагая, что вы можете добавлять эти ExtensionMethods только к объектам, а не отвешивать их от самого класса. Например, double.IsNaN(double) is? - person Joel Barsotti; 20.01.2010
comment
Я считаю, что это правильно. Он использует тип этого параметра, чтобы определить, к чему он применяется, и я сомневаюсь, что ему разрешено быть статическим (чтобы повесить его на класс как статический член). - person GalacticCowboy; 20.01.2010