当我创建一个类并覆盖ToString()
时,当我在调试器下运行 Visual Studio 时,我可以用鼠标光标将鼠标悬停在该类型的变量上,VS 会向我显示我在方法中返回的任何内容,让在那里放置典型的信息总和特定的类和在调试过程中有价值。但是,如果我从 继承我的类List
,VS 总是显示类似于Count=20
忽略从我的覆盖返回的值ToString()
,所以我variable.ToString()
每次想查看类摘要时都必须输入 QuickWatch 窗口。有没有办法让 VS 显示ToString()
继承自的类List
?
问问题
782 次
1 回答
3
您需要创建自己的继承 .NETList
类的子类,并在那里覆盖该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 回答