我有以下结构:
struct entry
{
public string msg;
public UInt32 ts;
public bool newLines;
public entry(string message, UInt32 timestamp, bool lines = false)
{
msg = message;
ts = timestamp;
newLines = false;
}
public override string ToString()
{
return msg + (newLines ? "\n" : "");
}
};
我在我的程序中使用了这些结构的List,在程序的某些部分我需要获取这些条目的列表,并将它们组合回一个由换行符分隔的长字符串。我的问题是我的ToString()方法是否与List<entry>
一起使用?或者我是否需要覆盖其他功能?
由于
答案 0 :(得分:5)
您需要创建一个继承List的自定义类,如下所示:
public class EntryList : List<entry>
{
public override string ToString()
{
//return what you want
//EDIT: accessing items
foreach (entry e in this)
//...
}
}
答案 1 :(得分:3)
它不适用于List<entry>
因为您正在覆盖ToString
条目结构。您只需使用string.Join
:
var fullString = string.Join(",", entries);
您还可以创建一个新类型,该类型将继承List<entry>
,您可以在其中覆盖ToString
。
答案 2 :(得分:2)
构建自己的'EntryList',它来自List&lt;进入&gt;并覆盖ToString()。
另一个提示 - 在ToString实现中使用StringBuilder来更有效地构建你的超级字符串。
答案 3 :(得分:0)
您可以使用具有该方法的扩展方法,而不是一个全新的子类。然而,正如其他人所提到的那样,将长列表保存为字符串可能不是正确的,并且会产生奇怪的效果(特别是在调试器中)。
无论实施如何:
让列表tostring反映某些状态可能更正确 列表(项目总数,值的总和等),而不是转储每个项目的详细信息。