C# 如何将各种未知数字类型转换为双精度
我的代码将从各种数字类型的不同来源获取大量数据,这些数据都以typeC# 如何将各种未知数字类型转换为双精度,c#,casting,type-conversion,C#,Casting,Type Conversion,我的代码将从各种数字类型的不同来源获取大量数据,这些数据都以typeobject的形式到达,为了便于使用,我想将其全部转换为double(这足以表示全部传入数据,并且不需要极高的精度)。我当然能够解决这个问题,但我的解决方案似乎很笨拙: List<object> list = new List<object>(); list.Add((int)42); list.Add((short)42); list.Add((float)42.1); list.Add((doubl
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 List=新列表();
增加((int)42);
列表。添加((短)42);
增加((浮动)42.1);
增加((双)42.1);
增加((十进制)42.1);
foreach(列表中的对象valObj)
{
类型objType=valObj.GetType();
双重价值;
如果(objType==typeof(int)){value=(double)(int)valObj;}
else if(objType==typeof(short)){value=(double)(short)valObj;}
else如果(objType==typeof(float)){value=(double)(float)valObj;}
else如果(objType==typeof(double)){value=(double)valObj;}
else if(objType==typeof(decimal)){value=(double)(decimal)valObj;}
else抛出新异常(“意外类型”);
Console.WriteLine(“值:”+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 List=新列表();
增加((int)42);
列表。添加((短)42);
增加((浮动)42.1);
增加((双)42.1);
增加((十进制)42.1);
foreach(列表中的对象valObj)
{
double value=(double)valObj;//您可以使用
Convert.ToDouble()
bool
字节
char
DateTime
decimal
double
float
int
long
对象
sbyte
short
string
uint
ulong
ushort
(double)Convert.ChangeType(obj,typeof(double))
?或者var value=Convert.ToDouble(x);
接受对象并返回double
foreach (object valObj in list)
{
double value = Convert.ToDouble(valObj);
Console.WriteLine("Value: " + value);
}