如何为海关结构列表制作ToString()方法

时间:2012-09-04 15:42:03

标签: c#

我有以下结构:

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>一起使用?或者我是否需要覆盖其他功能?

由于

4 个答案:

答案 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反映某些状态可能更正确 列表(项目总数,值的总和等),而不是转储每个项目的详细信息。