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

我将项目中 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 ?

标签: c# csvhelper


【解决方案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();
      }
}

【讨论】:

    最近更新 更多