如何从各种未知的数字类型转换为double

时间:2017-04-19 16:27:20

标签: c#

我的代码将从各种数字类型的各种来源获取大量数据,这些数据都以类型object到达,为了便于使用,我想将其全部转换为{{1} } type(这足以表示输入数据的全部范围,并且不需要极高的精度)。我当然能够解决这个问题,但我的解决方案似乎很笨重......

double

我想做一些更简单的事情,但这不起作用......

  List<object> list = new List<object>();

  list.Add((int)42);
  list.Add((short)42);
  list.Add((float)42.1);
  list.Add((double)42.1);
  list.Add((decimal)42.1);

  foreach (object valObj in list)
  {
     Type objType = valObj.GetType();
     double value;

     if      (objType == typeof(int))     { value = (double)(int)valObj;     }
     else if (objType == typeof(short))   { value = (double)(short)valObj;   }
     else if (objType == typeof(float))   { value = (double)(float)valObj;   }
     else if (objType == typeof(double))  { value = (double)valObj;          }
     else if (objType == typeof(decimal)) { value = (double)(decimal)valObj; }
     else throw new Exception("Unexpected type");

     Console.WriteLine("Value: " + value);
  }

知道 List<object> list = new List<object>(); list.Add((int)42); list.Add((short)42); list.Add((float)42.1); list.Add((double)42.1); list.Add((decimal)42.1); foreach (object valObj in list) { double value = (double)valObj; // <--- exception of type 'System.InvalidCastException' Console.WriteLine("Value: " + value); } 中的所有数据都是可以合法地投射为list的数字类型,如何在不首先投射(double)的情况下将其转换为(double)它是什么类型的?

1 个答案:

答案 0 :(得分:6)

您可以使用Convert.ToDouble()

foreach (object valObj in list)
{
    double value = Convert.ToDouble(valObj);
    Console.WriteLine("Value: " + value);
}

Convert.ToDouble()有许多重载,可以采用以下任何数据类型,

  • bool
  • byte
  • char
  • DateTime
  • decimal
  • double
  • float
  • int
  • long
  • object
  • sbyte
  • short
  • string
  • uint
  • ulong
  • ushort