Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 通过Linq将CSV文件发送到类_C#_Linq_Csv - Fatal编程技术网

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();