C# 通过Linq将CSV文件发送到类
对于下面的代码,在C# 通过Linq将CSV文件发送到类,c#,linq,csv,C#,Linq,Csv,对于下面的代码,在foreach上,我得到了一个异常 我将断点放在csv(第二行)上,展开结果,我看到两个条目,这是可以的 当我在foreach中的csv上执行相同操作时,我会得到一个提示:无法从关闭的文本阅读器读取。 有什么想法吗 谢谢 我的CSV文件: A0;A1;A2;A3;A4 B0;B1;B2;B3;B4 代码 var lines = File.ReadLines("filecsv").Select(a => a.Split(';')); IEnumerable<IEnu
foreach
上,我得到了一个异常
我将断点放在csv
(第二行)上,展开结果,我看到两个条目,这是可以的
当我在foreach
中的csv
上执行相同操作时,我会得到一个提示:无法从关闭的文本阅读器读取。
有什么想法吗
谢谢
我的CSV文件:
A0;A1;A2;A3;A4
B0;B1;B2;B3;B4
代码
var lines = File.ReadLines("filecsv").Select(a => a.Split(';'));
IEnumerable<IEnumerable<MyClass>> csv =
from line in lines
select (from piece in line
select new MyClass
{
Field0 = piece[0].ToString(),
Field1 = piece[1].ToString()
}
).AsEnumerable<MyClass>();
foreach (MyClass myClass in csv)
Console.WriteLine(myClass.Field0);
Console.ReadLine();
也许这是因为LINQ不直接读取所有项目,它只是在需要时创建它读取的连接 你可以试着投:
var lines = File.ReadLines("filecsv").Select(a => a.Split(';')).ToArray();
我怀疑这是
yield
关键字(用于Select()
)和内部文本阅读器(位于ReadLines
)不“同意”的组合
将lines变量更改为var lines=File.ReadLines(“filecsv”)。选择(a=>a.Split(“;”).ToArray()代码>
这应该可以排序了。也许像这样的东西会给你想要的东西:
var jobs = File.ReadLines("filecsv")
.Select(line => line.Split(','))
.Select(tokens => new MyClass { Field0 = tokens[0], Field1 = tokens[1] })
.ToList();
您遇到的问题是,您正在保存可枚举文件
,这会延迟执行。然后通过调试器查看它,调试器循环文件,完成所有工作并处理它。然后你再试一次
上面的代码实现了您当前所需的功能,更简洁,并强制转换为列表,从而消除了懒惰行为
还要注意的是,我看不出您的从第行的到第行的是如何正确工作的
var jobs = File.ReadLines("filecsv")
.Select(line => line.Split(','))
.Select(tokens => new MyClass { Field0 = tokens[0], Field1 = tokens[1] })
.ToList();