C# CsvHelper,在标头无效时列出预期标头

C# CsvHelper,在标头无效时列出预期标头,c#,csvhelper,C#,Csvhelper,使用CsvHelper读取CSv文件,您可以在类映射中指定预期的头: public sealed class readFooMapper : ClassMap<FooCSV> { public readFooMapper() { Map(m => m.Id).ConvertUsing(row => ((CsvReader)row).Parser.Context.RawRow); Map(x => x.Foo).Name

使用CsvHelper读取CSv文件,您可以在
类映射中指定预期的头:

public sealed class readFooMapper : ClassMap<FooCSV>
{
    public readFooMapper()
    {
        Map(m => m.Id).ConvertUsing(row => ((CsvReader)row).Parser.Context.RawRow);
        Map(x => x.Foo).Name("Foo");
        Map(x => x.Bar).Name("Bar");
        Map(x => x.FooBar).Name("FooBar");
        Map(x => x.MyOptional).Name("MyOptional").Optional();
    }

}
我真正想要的是
readFooMapper
映射配置。
告诉用户:“看,我希望列列表:###,###,###。带有可选列:X,Y,Z。\n缺少列=A,B,C。”


这不需要维护一个,另一个列出了标题和可选项。

我认为这接近您要查找的内容。它不会检查
ConvertUsing
方法中是否引用了列

var map=new readFooMapper();
var required=map.MemberMaps
。其中(m=>m.Data.Ignore==false
&&m.Data.ReadingConvertExpression==null
&&m.Data.IsOptional==false)
.Select(m=>m.Data.Member.Name)
.ToList();
var optional=map.MemberMaps
。其中(m=>m.Data.Ignore==false
&&m.Data.ReadingConvertExpression==null
&&m.Data.IsOptional==真)
.Select(m=>m.Data.Member.Name)
.ToList();

太好了。我在上下文中查找每个对象,但
MemberMaps
正是我所需要的。这不仅仅是接近。请注意,
ConvertUsing
引用未映射的列可能会使事情变得棘手。
var errorSb = new StringBuilder();
[...]
csvReader.Configuration.HeaderValidated =
    (isValid, headerNames, headerNameIndex, context) =>
    {
        allHeaderNames.Add(headerNames);
        if (!isRowValid)
        {
            isHeaderInvalid= true;
        }
    };