我的代码将从各种数字类型的各种来源获取大量数据,这些数据都以类型形式到达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);
}
Run Code Online (Sandbox Code Playgroud)
我想做一些更简单的事情,但这不起作用......
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);
}
Run Code Online (Sandbox Code Playgroud)
知道数据list类型中的所有数据都可以合法地被投射为(double),如何在(double)不首先投射的情况下将它们转换valObj为任何类型?
你可以用Convert.ToDouble().
foreach (object valObj in list)
{
double value = Convert.ToDouble(valObj);
Console.WriteLine("Value: " + value);
}
Run Code Online (Sandbox Code Playgroud)
Convert.ToDouble() 有许多重载,可以采取以下任何数据类型,
boolbytecharDateTimedecimaldoublefloatintlongobjectsbyteshortstringuintulongushort| 归档时间: |
|
| 查看次数: |
491 次 |
| 最近记录: |