0

クラスと override を作成し、ToString()Debugger の下で Visual Studio を実行すると、マウス カーソルで型の変数にカーソルを合わせることができ、VS はメソッドで返されたものをすべて表示し、これに典型的な情報の合計をそこに置くことができます。特定のクラスであり、デバッグ中に価値があります。ただし、 からクラスを継承すると、オーバーライドされた から返された値を無視Listするようなものが常に VS に表示されるため、クラスの概要を表示するたびに [クイック ウォッチ] ウィンドウに入力する必要があります。から継承されたクラスのVS を表示する方法はありますか?Count=20ToString()variable.ToString()ToString()List

4

1 に答える 1

3

.NET クラスを継承する独自のサブクラスを作成し、そこでメソッドListをオーバーライドする必要があります。ToString()標準List<type>構文を使用する場所はすべて、新しいカスタム List クラスを使用するように変更する必要があります。

public class MyList<T> : List<T>
{
    public override string ToString()
    {
        StringBuilder sb = new StringBuilder();
        foreach (T t in this)
        {
            sb.Append("[" + t.ToString() + "] ");
        }
        return sb.ToString();
    }
}

このコードを使用して:

static void Main(string[] args)
{
    MyList<string> strings = new MyList<string>();
    strings.Add("asdf");
    strings.Add("teare");
}

ToString() が呼び出されると、次の出力が生成されます。

[asdf] [teare]

あなたの質問を編集してください:

共通のインターフェイスを構築することをお勧めします。特定のテンプレートを指定して、リスト クラスが何であれ、特定のカスタム クラス メンバーをフェッチすることができます。以下のコードが示しています。

public interface IWidget
{
    string Name { get; }
}

public class Widget : IWidget
{
    public string Name { get; private set; }
    public Widget(string name_) { Name = name_; }
}

[DebuggerDisplay("{this.ToString()}")]
public class MyList<T> : List<T> where T : IWidget
{
    public override string ToString()
    {
        StringBuilder sb = new StringBuilder();
        foreach (IWidget w in this)
        {
            sb.Append("[" + w.Name + "] ");
        }
        return sb.ToString();
    }
}

注: これにより、カスタム コレクション クラスで使用できる型が制限されますが、目的によっては問題にならない場合があります。

于 2013-03-07T19:14:09.323 に答える