【发布时间】:2022-01-03 20:18:10
【问题描述】:
用 C# record 定义为
public record Traffic(TrafficType Type, string Wan, string Lan, string Domain, string Org, IPAddress SrcIp, string SrcMac, IPAddress DestIp,
string Protocol, string Scheme);
当我尝试通过
编写它们的集合时var all = new List<Traffic>();
// ...populate all
using var writer = new StreamWriter("file.csv");
using var csv = new CsvHelper.CsvWriter(writer, CultureInfo.InvariantCulture);
csv.WriteRecords(all);
我收到以下消息的异常:
发生意外错误。 IWriter 状态: 行:1 索引:0
标题记录: 1
如果我将记录对象的集合转换为类对象的集合,那么它就成功了。 (尝试将record 实例传递给class 构造函数不起作用。我必须创建一个class 构造函数,该构造函数从record 实例中获取每个感兴趣的属性作为显式参数)
这是一个使用 CsvHelper 27.2.1 的 .NET Core 5.0 项目。
C#record 类型不受 CsvHelper 支持的结论是否正确?
谢谢。
【问题讨论】:
-
记录是不可变的,我敢打赌 CsvHelper 正在使用某种形式的反射来更新对象属性,这就是您看到运行时错误的原因。