C# CsvHelper,在标头无效时列出预期标头
使用CsvHelper读取CSv文件,您可以在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
类映射中指定预期的头:
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;
}
};