我希望能够遍历CSV文件中的所有记录,并将所有好的记录添加到一个集合中,将所有“坏”的记录分别处理。但我似乎无法做到这一点,我想我一定是漏掉了什么。
如果我尝试捕获BadDataException,那么后续的读取将会失败,这意味着我不能继续读取文件的剩余部分。
另一个讨论的选择是将BadDataFound回调操作设置为处理它 -
如果我尝试捕获BadDataException,那么后续的读取将会失败,这意味着我不能继续读取文件的剩余部分。
while (true)
{
try
{
if (!reader.Read())
break;
var record = reader.GetRecord<Record>();
goodList.Add(record);
}
catch (BadDataException ex)
{
// Exception is caught but I won't be able to read further rows in file
// (all further reader.Read() result in same exception thrown)
Console.WriteLine(ex.Message);
}
}
另一个讨论的选择是将BadDataFound回调操作设置为处理它 -
reader.Configuration.BadDataFound = x =>
{
Console.WriteLine($"Bad data: <{x.RawRecord}>");
};
然而,尽管回调被调用,但坏记录仍然出现在我的“好列表”中。
我能否查询读取器以查看记录是否良好,然后再将其添加到列表中?
对于此示例,我的记录定义为 -
class Record
{
public string FirstName { get; set; }
public string LastName { get; set; }
public int Age { get; set; }
}
而数据(第一行有误,第二行正确)-
"Jo"hn","Doe",43
"Jane","Doe",21
有趣的是,使用MissingFieldException处理缺少字段似乎正好符合我的要求——抛出异常,但后续行仍然可以正常读取。
MissingFieldException
是你想要的并且它能够满足你的需求,为什么它不能正常工作呢? - Tim Schmelter