【发布时间】:2021-06-26 14:13:11
【问题描述】:
我的问题如下。我想借助 WPF c# 下的 CsvHelper 将类属性写入 CSV 文件,然后再将它们读回。引用的类之一具有非默认的参数化构造函数。如何让 CsvHelper 正确调用其构造函数?
因此我使用以下地图文件。
public class TradeLogRecMap : ClassMap<TradeLogRec>
{
public TradeLogRecMap()
{
AutoMap(CSVConfig);
}
}
使用这些类和结构
public class Liquidity
{
static readonly Dictionary<int, string> Values = new Dictionary<int, string>
{
{0, "None"},
{1, "Added Liquidity"},
{2, "Removed Liquidity"},
{3, "Liquidity Routed Out" }
};
public Liquidity(int p)
{
Value = Values.ContainsKey(p) ? p : 0;
}
public int Value { get; set; }
public override string ToString()
{
return Values[Value];
}
}
public class Execution
{
public Liquidity LastLiquidity { get; set; }
public Execution()
{
LastLiquidity = new Liquidity(0);
}
}
public struct TradeLogRec
{
public Execution execution { set; get; }
}
当我编写 CSV 文件时,它看起来还不错。但是读回来它说它错过了标题“p”。向 CSV 文件添加“p”标头可以解决此问题,但这样做不是一种选择。还添加了一个默认构造函数
public Liquidity()
{
}
解决问题。但这不是以太的选择。
为什么它需要标题“p”?
是否可以通过map文件或CvsHelper配置中的一些构造函数设置来解决?
或者它是一个错误?
【问题讨论】:
-
你能以任何方式修改
Liquidity吗?如果将p重命名为Value,则 CsvHelper 将调用具有正确单元格值的构造函数,即public Liquidity(int Value) => this.Value = Values.ContainsKey(Value) ? Value : 0;。请参阅:dotnetfiddle.net/eyeWsq。 -
感谢您的指出!另请参阅我在答案中的评论。
标签: c# csv constructor csvhelper