我有一个包含以下数据的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:输入字符串的格式不正确。
然后我该如何投射?
因为您的数字使用点作为小数点分隔符,并且系统本地化可以使用其他字符,所以可以使用:
using System.Xml;
double temperature = XmlConvert.ToDouble(data[i][2]);
也许您需要将System.Xml添加到项目的程序集引用中。