1

我有以下结构:

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" : "");
    }
};

我在我的程序中使用这些结构的列表,在程序的某些部分我需要获取这些条目的列表,并将它们组合回一个由换行符分隔的长字符串。我的问题是我的 ToString() 方法是否适用于List<entry>? 还是我需要覆盖另一个功能?

谢谢

4

4 回答 4

5

您需要创建一个继承 List 的自定义类,如下所示:

public class EntryList : List<entry>
{
   public override string ToString()
   {
      //return what you want
      //EDIT:  accessing items
      foreach (entry e in this)
         //...
   }
}
于 2012-09-04T15:43:25.893 回答
3

它不会起作用,List<entry>因为您正在覆盖ToString入口结构。您可以简单地使用string.Join

var fullString = string.Join(",", entries);

您还可以创建新类型,该类型将继承List<entry>您可以覆盖的形式ToString

于 2012-09-04T15:44:51.243 回答
2

构建您自己的从 List<entry> 派生的“EntryList”并覆盖 ToString()。

另一个提示 - 在您的 ToString 实现中使用 StringBuilder 来更有效地构建您的 uber-string。

于 2012-09-04T15:43:12.367 回答
0

您可以使用具有该方法的扩展方法,而不是一个全新的子类。但是,正如其他人所提到的,将长列表作为字符串进行水合可能不是正确的事情,并且会产生奇怪的效果(尤其是在调试器中)。

无论实施如何:

让列表 tostring 反映列表的某些状态(项目总数、值总和等)可能更正确,而不是转储每个项目的详细信息。

于 2012-09-04T16:33:56.977 回答