CSV Helper 在 v22 中不再有 setter?

如何解决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 结束..

enter image description here

..但是这个构造函数有 one recent related issue 因为不能提供 null 来表示“不采取任何行动”,因为它是用于指示“没有提供值”的默认值(我'我不确定一个可选的委托是否可以是其他任何东西 tbh) 所以你传入的任何 null 都会被有效地忽略,并且使用 ConfigurationFunctions.cs 中的默认函数..

如果您想使用构造函数形式并希望出现“无操作”,建议的解决方法是提供一个“什么都不做”的委托:

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

我个人会使用初始化表单

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?