void Main()
{
var data = @"Id,Name
1,Good Name
2,Bad "" Name
3,Another Good Name";
var isFieldBad = false;
var config = new CsvConfiguration(CultureInfo.InvariantCulture)
{
BadDataFound = row => {
isFieldBad = true;
Console.WriteLine("BadDataFound on row " + row.Context.Parser.Row);
}
};
var reader = new StringReader(data);
using var csv = new CsvReader(reader, config);
csv.Read();
csv.ReadHeader();
var results = new List<Foo>();
while (csv.Read())
{
var record = csv.GetRecord<Foo>();
if (isFieldBad)
{
isFieldBad = false;
continue;
}
results.Add(record);
}
results.Dump();
}
public class Foo
{
public int Id { get; set; }
public string Name { get; set; }
}
我对此并不确定,但我相信
IsFieldBad
它被删除是为了抛出一个BadDataException
。要升级此代码,您需要将循环包装while
在 try/catch 中。并且根据IsFieldBad
用于覆盖的内容,您可能还必须捕获MissingFieldException
。如果您不想抛出异常,可以使用
BadDataFound
中的属性CsvConfiguration
来设置您自己的IsFieldBad
变量。不同之处在于csv.Read()
不会抛出BadDataException
。当您实际尝试使用 之类的东西访问数据时,就会发生这种情况csv.GetRecord<T>()
。根据IsFieldBad
所覆盖的内容,您可能还必须MissingFieldFound
在 中设置CsvConfiguration
。