Csvhelper 在 v22 中不再有定居者了吗?

Csv Helper no more setters in v22?

我偶尔使用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 网站、Whosebug 和文档中的示例仍然引用旧的 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: (_,_,_) => { }
);

我个人会使用初始值设定项形式