投放不断出错

我有一个包含以下数据的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]);)之前打印了数据[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:无法从“对象”转换为字符串。

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

参数1:无法从“对象”转换为字符串。

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

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

那我该如何铸造呢?

lyq1183395571 回答:投放不断出错

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

using System.Xml;

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

如果解析错误,它将引发异常。

因此,您可以尝试...捕获以对其进行管理。

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

否则,您可以使用@Fabjan解决方案:

if (double.TryParse(data[i][2].ToString(),System.Globalization.NumberStyles.Any,System.Globalization.CultureInfo.InvariantCulture,out var temperature);
  IsOk();
else
  IsNotOk();
本文链接:https://www.f2er.com/3135747.html

大家都在问