c# - Csvhelper v22 不再有定居者?

标签 c# csvhelper

我偶尔使用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。

enter image description here

..但是后来有 one recent related issue使用此构造函数,因为不能提供 null 来表示“不采取任何操作”,因为它是用于指示“未提供任何值”的默认值(并且我不确定是否可以使用可选委托(delegate)任何其他 tbh),因此您传入的任何 null 都会被有效忽略,并使用 ConfigurationFunctions.cs 中的默认函数..

如果您想使用构造函数形式并希望出现“无操作”,建议的解决方法是提供“不执行任何操作”委托(delegate):

var conf = new CsvConfiguration(CultureInfo.InvariantCulture,
  headerValidated: (_,_) => { },
  missingFieldFound: (_,_,_) => { }
);

我个人会使用初始化表单

关于c# - Csvhelper v22 不再有定居者?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66123554/

相关文章:

c# - 正则表达式提取引号之间的字符串

c# - 从 IIS 运行 PsExec : PsExecSVC hanging on remote host

c# - CSVHelper 不解析我的制表符分隔的 CSV 文件

c# - 无法将大量数据写入流

c# - CsvHelper : Adding a title using CsvHelper

asp.net-core - 你如何实现(和空)BadDataFound

c# - 删除给定索引号以外的所有元素

c# - 在用户控件中定义命令绑定(bind)

c# - MSMQ - 无法从多播队列接收

c# - 为控制台获取一个 TextWriter