Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/273.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/grails/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将各种未知数字类型转换为双精度_C#_Casting_Type Conversion - Fatal编程技术网

C# 如何将各种未知数字类型转换为双精度

C# 如何将各种未知数字类型转换为双精度,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

我的代码将从各种数字类型的不同来源获取大量数据,这些数据都以type
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);
    }