如何解决CSV Helper 在 v22 中不再有 setter?
我偶尔使用 CsvReader;通过 NuGet 从 v18 升级到最新的 v22 时,我发现了重大更改,但从 CsvReader 的站点中不清楚如何修复重大更改。有谁知道如何在 CsvHelper v22 中提供等效的功能来执行 v18 中的此代码:
using (var csv = new CsvHelper.CsvReader(reader,CultureInfo.InvariantCulture))
{
csv.Configuration.RegisterClassMap<MyMap>(); //I believe this should Now be csv.Context.RegisterClassMap<MyMap>();
csv.Configuration.HeaderValidated = null; //broken - no setter on IReaderConfiguration
csv.Configuration.MissingFieldFound = null; //broken - no setter on IReaderConfiguration
}
CsvHelper 网站、StackOverflow 和文档上的示例仍然引用旧的 v18 setter,所以我找不到解决方法。
解决方法
它们是仅用于初始化的属性,因此它们仍然可以在初始化器中设置:
var conf = new CsvConfiguration(CultureInfo.InvariantCulture)
{
HeaderValidated = ...,MissingFieldFound = ...
};
using (var csv = new CsvHelper.CsvReader(reader,conf))
{
csv.Context.RegisterClassMap<SomeMap>();
}
还有一个带有一堆可选的庞大构造函数,你可以选择它们:
var conf = new CsvConfiguration(CultureInfo.InvariantCulture,headerValidated: ...,missingFieldFound: ...
);
构造函数签名似乎表明,如果使用此构造函数并且没有为它们指定任何内容,则默认情况下它们将以 null 结束..
..但是这个构造函数有 one recent related issue 因为不能提供 null
来表示“不采取任何行动”,因为它是用于指示“没有提供值”的默认值(我'我不确定一个可选的委托是否可以是其他任何东西 tbh) 所以你传入的任何 null
都会被有效地忽略,并且使用 ConfigurationFunctions.cs 中的默认函数..
如果您想使用构造函数形式并希望出现“无操作”,建议的解决方法是提供一个“什么都不做”的委托:
var conf = new CsvConfiguration(CultureInfo.InvariantCulture,headerValidated: (_,_) => { },missingFieldFound: (_,_,_) => { }
);
我个人会使用初始化表单
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。