不支持 C# 记录类型?

C# record type not supported?

使用 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);

我收到以下消息的异常:

An unexpected error occurred. IWriter state: Row: 1 Index: 0
HeaderRecord: 1

如果我将记录对象的集合转换为 class 对象的集合,那么它会成功。 (试图将 record 实例传递给 class 构造函数没有用。我不得不创建一个 class 构造函数,它从 record 实例作为显式参数)

这是一个使用 CsvHelper 27.2.1 的 .NET Core 5.0 项目。

我得出的 C# record 类型不受 CsvHelper 支持的结论是否正确?

谢谢。

问题不在于 record。问题是 IPAddressAutoMap。如果您创建具有 IPAddress 属性的 class,您将得到相同的错误。我不确定为什么 AutoMap 会抛出异常,如果您手动映射所有属性,它就可以正常工作。错误的内部异常是Value cannot be null. (Parameter 'source').

void Main()
{
    var all = new List<Traffic>()
    {
        new (TrafficType.Type1, "Wan1","Lan1","Domain1","Org1",IPAddress.Parse("192.168.0.1"), "SrcMac1",IPAddress.Parse("192.168.0.1"), "Protocol1", "Scheme1")
    };

    using var csv = new CsvHelper.CsvWriter(Console.Out, CultureInfo.InvariantCulture);
    
    csv.Context.RegisterClassMap<TrafficMap>();
          
    csv.WriteRecords(all);
}

public class TrafficMap : ClassMap<Traffic>
{
    public TrafficMap()
    {
        //AutoMap(CultureInfo.InvariantCulture); // This will throw an exception.
        Map(x => x.Type);
        Map(x => x.Wan);
        Map(x => x.Lan);
        Map(x => x.Domain);
        Map(x => x.Org);
        Map(x => x.SrcIp);
        Map(x => x.SrcMac);
        Map(x => x.DestIp);
        Map(x => x.Protocol);
        Map(x => x.Scheme);
    }
}

public record Traffic(TrafficType Type, string Wan, string Lan, string Domain, string Org, IPAddress SrcIp, string SrcMac, IPAddress DestIp,
        string Protocol, string Scheme);
    
public enum TrafficType
{
    Type1,
    Type2
}