我的代码将从各种数字类型的各种来源获取大量数据,这些数据都以类型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)
它是什么类型的?
答案 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