从 2.8.4 更新到 27.1.1 后,C# CsvWriter 抛出“CsvWriter 不包含接受 1 个参数的构造函数”

Posted

技术标签:

【中文标题】从 2.8.4 更新到 27.1.1 后,C# CsvWriter 抛出“CsvWriter 不包含接受 1 个参数的构造函数”【英文标题】:C# CsvWriter throws "CsvWriter does not contain a constructor that takes 1 arguments" after update from 2.8.4 to 27.1.1 【发布时间】:2021-11-25 00:15:15 【问题描述】:

我将项目中 CsvHelper 的包从 2.8.4 更新到了 27.1,看起来我一直使用的方法已经更新。

现在又多了两个参数。

我不确定CsvConfigurationCultureInfo 是什么,或者我需要做什么来纠正这个错误。

CsvWriter does not contain a constructor that takes 1 argument.

新方法:

public CsvWriter(TextWriter writer, CsvConfiguration configuration);

public CsvWriter(TextWriter writer, CultureInfo culture, bool leaveOpen = false);

我的代码:

using(var fs = new MemoryStream()) 
  using(var tx = new StreamWriter(fs)) 
    var csv = new CsvWriter(tx);
    csv.WriteHeader<TemplateCsvModel>();
    csv.WriteRecords(templates);
    csv.Dispose();
    return Encoding.UTF8.GetPreamble().Concat(fs.ToArray()).ToArray();
  

【问题讨论】:

您可能希望首先查看他们的文档,了解配置的可用和要求:joshclose.github.io/CsvHelper/getting-started。除非您知道您需要特殊情况,否则您可能会使用 CultureInfo.InvariantCulture 感谢 System.Globalization ? 【参考方案1】:

CultureInfo 需要考虑不同文化之间的不同格式和解析,因为并非世界上每个人的日期、货币等格式都相同。

如果您不需要根据用户本地设置解析数据,请使用CultureInfo.InvariantCulture

using (var fs = new MemoryStream()) 
    using var tx = new StreamWriter(fs)
    using (var csv = new CsvWriter(tx, CultureInfo.InvariantCulture) 
        csv.WriteHeader<TemplateCsvModel>();
        csv.WriteRecords(templates);
        return Encoding.UTF8.GetPreamble().Concat(fs.ToArray()).ToArray();
      

【讨论】:

以上是关于从 2.8.4 更新到 27.1.1 后,C# CsvWriter 抛出“CsvWriter 不包含接受 1 个参数的构造函数”的主要内容,如果未能解决你的问题,请参考以下文章

C# SignalR:从代码隐藏更新数据的问题

C# 更新并将对象从 MainForm 传递到已打开的 childForm

C# 自动更新程序怎么弄

C# 从程序线程更新表单(richTextBox 和 toolStripStatusLabel)

框架从 4.5.2 升级到 4.7.2 后 C# Web API 引发 CORS 错误

c# 从数据库中过滤出 NULL 行并更新现有行