我使用CsvHelper 4.0.3。
我定义了一个嵌套的类,如下所示:
private class CsvLine {
public string Solution;
public string Project;
public string DependsOnProject;
public string Weight;
public string DependsOnPackage;
public string PackageVersion;
}
我想使用 CsvHelper
解析我的 .csv 文件,它包含以下字段:
Solution,Project,DependsOnProject,Weight,DependsOnPackage,PackageVersion
这是我的代码:
TextReader readFile = new StreamReader(dependenciesCsvFilePath);
var csvReader = new CsvReader(readFile);
IEnumerable<CsvLine> records = csvReader.GetRecords<CsvLine>();
根据这里的文档,上面的代码应该可以工作。然而,当我检查records
时,我看到消息No members are mapped for type 'ParentClass+CsvLine'
。
我将CsvLine
的可访问性从private
更改为public
,但没有任何变化。
我做错了什么?
编辑:我尝试取消嵌套CsvLine
类并使其公开,但那也没有帮助。
编辑:我按照Nkosi建议进行了更改;然而,现在它说records
是一个空集合:“Enumeration yielded no results”。我的.csv文件中肯定有数据存在,所以集合不应该是空的。
这里有一些样本数据:
Solution,Project,DependsOnProject,Weight,DependsOnPackage,PackageVersion
FOD.sln,ABC.DEF,IMS.ABC,1,,
FOD.sln,ABC.DEF,IMS.DEF,1,,
FOD.sln,ABC.DEF,IMS.GHI,1,,
FOD.sln,ABC.DEF,IMS.JKL,1,,
编辑:问题已解决!Nkosi和Panagiotis的答案互相补充。
.GetRecords<CsvLine>().ToArray()
先加载数据,然后检查它们。我曾经看到调试器抱怨空枚举,即使有记录。顺便问一下,你使用的是哪个版本的CsvHelper?它几乎每周都会更改版本。 - Panagiotis Kanavos,results
格式说明符,强制调试器评估IEnumerable并返回所有结果,例如record,results
。但请确保不要在大文件上使用此功能。 - Panagiotis Kanavos