铸造不断出错

问题描述 投票:0回答:1

我有一个包含以下数据的CSV(无标题)

12,2010,76.5
2,2000,45
12,1940,30.2

并且我正在将数据读入List<List<object>>

要知道我正在使用以下循环的每一行和每一列/每一行中有什么

List<List<object>> data = CSVReaderNoHeader.Read("input")

for (var i = 0; i < data.Count; i++)
{

    double month = (double)(int)data[i][0];
    print($"month:{month} ////END");

    double year= (double)(int)data[i][1];
    print($"year:{year} ////END");

    double temperature= (double)data[i][2];
    print($"temperature:{temperature} ////END");

}

是,我需要创建双打,这就是为什么我要取消装箱和转换(可以使用double.Parse代替。]

我可以打印月份和年份,但是达到double temperature= (double)data[i][2];时会引发以下错误

InvalidCastException:指定的强制转换无效。

我在那一行(print(data[i][2]);)之前打印了data [i] [2]中的内容,只是看是否一切井井有条,并得到了预期的76.5。然后,也使用

进行测试
double temperature= (double)(double)data[i][2];
double temperature= (double)(float)data[i][2];

((我认为没有必要添加多余的(双精度)/(浮点数)和

object tempr = data[i][2];
double temperature;
temperature = (double)tempr;

但是问题仍然存在。因此,我继续运行print(data[i][2].GetType());来查看返回的类型是否可以转换为双精度型。我得到的结果System.String

知道这一点,然后我尝试了方法double.TryParse,double.Parse和Convert.ToDouble,但没有任何效果

double.TryParse(data[i][2], out temperature);

参数1:无法从'object'转换为字符串。

double temperature = double.TryParse(data[i][2]);

参数1:无法从'object'转换为字符串。

double temperature = System.Convert.ToDouble(data[i][2]);

FormatException:输入字符串的格式不正确。

然后我该如何投射?

c# casting double
1个回答
0
投票

因为您的数字使用点作为小数点分隔符,并且系统本地化可以使用其他字符,所以可以使用:

using System.Xml;

double temperature = XmlConvert.ToDouble(data[i][2]);

也许您需要将System.Xml添加到项目的程序集引用中。

© www.soinside.com 2019 - 2024. All rights reserved.