【发布时间】:2019-06-17 09:46:26
【问题描述】:
我正在尝试遍历 .csv 文件以在控制台上输出。我正在使用 CsvHelper 并按照 T 的指南进行操作,但是每当我尝试遍历从 GetRecords() 方法获得的 IEnumerable 时,就会出现 ConfigurationException。
这是我正在使用的代码
using (var reader_ans = new StreamReader("scriptlists/prac_iden_ans.csv"))
using (var csv_ans = new CsvReader(reader_ans))
{
var ans = csv_ans.GetRecords<string>();
foreach (string item in ans)
{
Debug.Log(item);
}
}
这很奇怪,因为这正是文档和多个网站中的内容。
出现的错误是这样的:
ConfigurationException: Types that inherit IEnumerable cannot be auto mapped. Did you accidentally call GetRecord or WriteRecord which acts on a single record instead of calling GetRecords or WriteRecords which acts on a list of records?
我想知道这是否是我错过的一些愚蠢的事情,因为我对 C# 还很陌生。我也在 Unity3D 中对此进行编码,所以这可能是问题的一部分吗?
我也尝试在第一行使用 .ToList() 方法,但无济于事。
编辑1:
在尝试创建自定义类后,我遇到了另一个错误,这次是在我运行代码之前来自编译器。
本质上,在这个sn-p的代码中:
foreach (string item in ans)
{
Debug.Log(item);
}
foreach 被突出显示,并显示一条错误消息“无法将类型 'instructions.ScriptsList' 转换为 'string'”。我的文件名为“instructions.cs”。
还有一些可能是问题的额外信息:
1) 我在 IEnumerator 中编写这段代码,但我认为这不是问题,因为我确实有其他“foreach”行。除非 CsvHelper 使用某些在 IEnumerator 中不起作用的代码?
2) 我的 .csv 文件是在 excel 中创建的,并且它们确实有标题。它实际上只是多列“是”和“否”。在 Excel 中创建它并将其保存为 .csv(逗号分隔)是否会影响 CsvHelper 读取它的方式?
3) 类写在这个函数之上有关系吗? (我知道这是一种基础,但我对 C# 还是很陌生,而且我注意到在很多文档中,该类通常写在函数下方)
非常感谢您的帮助!
【问题讨论】:
-
example 指出,你需要一个 Foo 类
-
你的第一列是数字吗? csvHelper 使用的是 Jet Engine,它是 Excel 和 Access 的驱动程序。当数字是行号而不是列数据时,Jet 引擎假定第一列。因此,所有其他列都会移动到比您预期低一的索引。在 Excel 中使用通用格式也是同样的问题,它试图猜测数据类型并经常将数字更改为日期,将日期更改为数字。微软试图将智能添加到他们经常出错的软件中。
-
Debug.Log()正在寻找一个字符串,而您正在给它一个instructions.ScriptsList对象。 -
@DavidSpecht Debug.Log 接受
object并对其执行 ToString。喂它什么都没关系。
标签: c# unity3d automapper ienumerable csvhelper