Распаковать число, чтобы удвоить

Существует ли какой-то способ привести неизвестное число к двойному? Например

    public static double Foo(object obj)
    {
        if (!obj.GetType().IsValueType)
            throw new ArgumentException("Argument should be a number", "obj");
        return (double) obj;
    }

    private static void Main(string[] args)
    {
        double dbl = 10;
        decimal dec = 10;
        int i = 10;
        short s = 10;
        Foo(dbl);
        Foo(dec);
        Foo(i);
        Foo(s);
    }

но этот код выдает исключение при попытке распаковать неправильный тип.


person Alex Zhukovskiy    schedule 25.06.2014    source источник
comment
Почему вы ожидаете, что все типы значений могут быть приведены к double? Обратите внимание, что перечисления или структуры также являются типами значений.   -  person Tim Schmelter    schedule 25.06.2014
comment
Почему бы вам не использовать Преобразовать.ВDouble?   -  person EKrueger    schedule 25.06.2014
comment
@TimSchmelter, потому что в .Net нет простого способа определить, является ли какой-либо класс числовым. В любом случае, это был просто пример, нерабочий пример.   -  person Alex Zhukovskiy    schedule 25.06.2014
comment
@EKrueger, я забыл, что Convert работает с объектами. И не буду его использовать. Tnx.   -  person Alex Zhukovskiy    schedule 25.06.2014
comment
@AshtonWoods выдаст исключение для любого типа, кроме двойного. Например, передача целого числа 10 в метод также вызовет исключение.   -  person Alex Zhukovskiy    schedule 25.06.2014
comment
@AlexJoukovsky А, ты прав. Заказ заставил меня думать, что десятичная дробь была исключительной. Любые идеи, почему он выдает исключение?   -  person W0lfw00ds    schedule 26.06.2014
comment
Я думаю, что нашел ответ для исключения приведения: stackoverflow.com/a/8619952/2538037   -  person W0lfw00ds    schedule 26.06.2014


Ответы (3)



Convert.ToDouble Метод преобразует указанное значение в число двойной точности с плавающей запятой.

public static double Foo(object obj)
    {
        return Convert.ToDouble(obj);
    }
person Moez Rebai    schedule 25.06.2014

Это быстрый способ использовать Double.TryParse():

public static double Foo(object obj)
{
   double result;
   if (double.TryParse(obj.ToString(), out result))
      return result;
   else throw new ArgumentException("Argument should be a number", "obj");
}
person W0lfw00ds    schedule 25.06.2014