我使用CSV编写器,它在大多数情况下都很好用。当我尝试编写具有列表的对象时,它忽略仅写入列表。 对于eg.below,它会写入Trade对象的所有属性,除了Wave是一个Wave对象列表
我的班级交易包含一个列表Wave。
class Trade
{
public string symbol { get; set; }
public bool isOpen { get; set; }
public DateTime OpenTime { get; set; }
public DateTime CloseTime { get; set; }
public double mfe { get; set; }
public double mae { get; set; }
public double entryPrice { get; set; }
public double exitprice { get; set; }
public TradeP TradeSignal { get; set; }
public string comments { get; set; }
public int Days2Stop { get; set; }
public double TimeBreakout { get; set; }
public double r { get; set; }
public int daysreach1r { get; set; }
public int daysreach9x50 { get; set; }
public double maetill1r { get; set; }
public bool Day1ClosedDown { get; set; }
public List<Wave> Waves { get; set; }
}
// write all the trade objects
using (System.IO.StreamWriter file =
new System.IO.StreamWriter(@"C:\temp\" + DateTime.Now.ToString("yyyyMMdd") + "traderesults.txt", true))
{
var csv = new CsvWriter(file);
csv.WriteRecords(Trades);
}
在上面的屏幕截图中,您可以看到csv writer打印所有对象属性。它很长但最后它不打印Wave对象的属性
答案 0 :(得分:1)
CSV文件是平的。如果必须手动创建文件,您将如何表示此类记录?你必须重复记录。这是没有意义的,所以图书馆通过忽略 tableView.estimatedRowHeight = 88.0
tableView.rowHeight = UITableViewAutomaticDimension
tableView.heightAnchor.constraint(equalToConstant: tableView.contentSize.height).isActive = true
来做正确的事。
解决方法是让您的类中有另一个属性,为Waves
对象中的属性返回逗号分隔值,例如Wave
(Prop1
)。
string
您需要使用class Trade {
//..
public string WaveCSV {
get {
return string.Join(",", Waves.Select(w => w.Prop1).ToArray());
}
}
}
限定WaveCSV
,以便该值中的逗号不会造成损害,或者完全使用其他分隔符。
修改强>:
如果您需要多个媒体资源,则可以覆盖"
课程中的ToString()
,返回您想要的内容,然后使用Wave
。