如何配置 CsvHelper 以忽略与数据行不同的页脚行?

How can CsvHelper be configured to ignore a footer row that differs from the data rows?

我有一个 CSV 文件,末尾有一个记录计数行

id|key|limit
123|1|591
456|2|921
record_count|2

当我使用 class 映射 运行 this with CsvHelper 时,它在到达 record_count|2 行时抛出异常。我正在通过配置 ReadingExceptionOccurred 处理程序来忽略该行来解决它。

csvConfig.ReadingExceptionOccurred = ex =>
{
    if (ex.Exception.Context.Parser.RawRecord.Contains("record_count"))
    {
        return false;
    }

    return true;
};

这可行,但是否有更“标准”的方法来处理此页脚记录?

您可以在配置中使用 ShouldSkipRecord

void Main()
{
    var config = new CsvConfiguration(CultureInfo.InvariantCulture)
    {
        Delimiter = "|",
        ShouldSkipRecord = args => args.Record[0] == "record_count"
    };
    
    using (var reader = new StringReader("id|key|limit\n123|1|591\n456|2|921\nrecord_count|2"))
    using (var csv = new CsvReader(reader, config))
    {      
        var records = csv.GetRecords<Foo>().Dump();
    }
}

public class Foo
{
    public int id { get; set; }
    public int key { get; set; }
    public int limit { get; set; }
}