2013-03-07 59 views
0

當我創建一個類並重寫ToString(),當我調試器下運行Visual Studio我可以懸停在用鼠標遊標類型的變量,VS顯示我不管我的方法返回,又讓放在那裏的信息總和對於這個特殊的類而言是典型的,在調試過程中很有價值但是,如果我從List繼承我的課,總是VS顯示像從我重寫ToString()返回Count=20忽略了價值,所以我必須在快速監視窗口,我想看到的類總結每次鍵入variable.ToString()。有什麼辦法讓VS顯示ToString()List繼承的類?如何讓VS顯示在調試器下從List繼承的類的ToString()值?

回答

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(); 
    } 
} 

注:這將限制您可以在您的自定義集合類使用類型,但是這取決於你想要達到的目的,可能並不重要。

+0

好吧,但我需要通過這個特定類型的屬性裏面'的ToString()'來操作,因此這種方法應該知道的類型。 'MYLIST :列表',然後'MySpecifiTypeList:MYLIST '不幫我,同樣的計數爲20,與更多的代碼更新,告訴你如何能做到這一點的結果 – YMC 2013-03-07 20:02:09

+0

。 – 2013-03-07 21:54:23

+0

邁克,你是否運行它來檢查結果?我複製和粘貼你的代碼,但保持計數= 2。請告知 – YMC 2013-03-07 22:18:12