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