This question already has answers here:
Fastest Way for Converting an Object to Double?
                                
                                    (5个答案)
                                
                        
                                2年前关闭。
            
                    
我的代码将从各种数值类型的各种来源中获取大量数据,这些数据都以类型object的形式到达,并且为了易于使用,我想将其全部转换为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转换为任何类型的情况下将它们转换为valObj

最佳答案

您可以使用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

关于c# - 如何将各种未知数字类型转换为 double ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43501237/

10-11 23:05
查看更多