我有一个关于LINQ查询和返回类型的问题。我只想读取.csv文件中的值,其中有双分号由分号分隔,如下所示:
0016; 0010; -0,020; -0,014; 0020; 0016; -0,019; -0,014; 0023;
使用以下语句从文件读取工作正常:
double pdValue;
double[] pdValues;
var values = File.ReadAllLines(path)
.Select(a => a.Split(';')
.Select(str => double.TryParse(str, out pdValue) ? pdValue : 0));
pdValues = values.ToArray();
但最后一行返回'无法隐式转换System.Collections.Generic.IENumerable<双>加倍[]'错误。试图让它与数组一起使用会将错误更改为'无法隐式转换System.Collections.Generic.IENumerable< double> [] to double []'。
调试时,我已经可以看到values变量将文件中的所有值(不知何故)保存为数组...
我找不到任何东西,什么能给我一个暗示我究竟在这里做错了什么。有人能帮助我吗?
提前致谢!
答案 0 :(得分:2)
查看values
变量类型IEnumerable<IEnumerable<double>>
。您应该使用以下代码:
var values = File.ReadAllLines(path)
.SelectMany(a => a.Split(';')
.Select(str => double.TryParse(str, out pdValue) ? pdValue : 0));
pdValues = values.ToArray();
答案 1 :(得分:0)
ReadAllLine
方法将返回一个字符串数组(比如说数组A)。您使用的Split
方法将为您提供一个由“;”分隔的字符串数组对于Array A的每个项目。因此最终结果将是一个数组数组。这就是错误的原因。
您可以尝试:
var values = File.ReadAllLines(path).ToString()
.Split(';').Select(str => double.TryParse(str, out pdValue) ? pdValue : 0);