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 に答える