取消一个数字加倍

时间:2014-06-25 13:33:24

标签: c# .net boxing unboxing

是否有某种方法可以将未知数字转换成双倍?例如

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

但是当尝试将unbox打包为不正确的类型时,此代码会抛出异常。

3 个答案:

答案 0 :(得分:9)

最简单的方法可能是使用Convert.ToDouble。这为您进行转换,并使用数字类型string和其他任何实现IConvertible的(并且具有可以转换为double的值)。

public static double Foo(object obj)
{
    // you could include a check (IsValueType, or whatever) like you have now,
    // but it's not generally necessary, and rejects things like valid strings
    return Convert.ToDouble(obj);
}

答案 1 :(得分:0)

Convert.ToDouble方法将指定值转换为双精度浮点数。

public static double Foo(object obj)
    {
        return Convert.ToDouble(obj);
    }

答案 2 :(得分:0)

这是使用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");
}