【发布时间】:2020-03-05 10:01:25
【问题描述】:
我有一个包含以下数据的 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: 输入字符串的格式不正确。
那我要怎么投呢?
【问题讨论】:
-
我看到“System.String”。
-
尝试使用 InvariantCulture:
double.TryParse(data[i][2], NumberStyles.Any, CultureInfo.InvariantCulture, out temperature);。可能是在您的本地文化中,默认情况下使用 double 的分隔符是,而不是. -
有了 InvariantCulture 我也得到了
Argument 1: cannot convert from 'object' to string. -
如果你这样做:
double.TryParse(data[i][2].ToString(), NumberStyles.Any, CultureInfo.InvariantCulture, out temperature);? -
这行得通@Fabjan,谢谢!