【问题标题】:Can the watch window value of a List<> be customised?可以自定义 List<> 的监视窗口值吗?
【发布时间】:2016-10-14 10:10:03
【问题描述】:

覆盖类的 ToString() 通常是在监视窗口中获取自定义格式所需的全部操作,但是当类从列表派生时,它似乎不起作用。

class ListOfInts : List<int>
{
    public override string ToString()
    {
        return string.Join(",", this);
    }

    public static ListOfInts test = new ListOfInts() { 3, 4, 5 };
}

在我得到的监视窗口中检查“测试”

ListOfInts.test             Count = 3   ListOfInts

并且必须像这样手动强制问题:

ListOfInts.test.ToString()  "3,4,5"     string

这对于单个列表来说很好,但我有很多东西。有没有办法阻止默认的“Count = 3”格式优先?

【问题讨论】:

标签: c# visual-studio visual-studio-2015 visual-studio-debugging


【解决方案1】:

您可以使用DebuggerDisplayAttribute:

[DebuggerDisplay("{ToString()}")]
public class ListOfInts : List<int>
{
    public override string ToString()
    {
        return string.Join(",", this);
    }
}

【讨论】:

  • 有趣的是,他的快速监视窗口没有使用覆盖的ToString。我想这与他的调试器设置有关(例如“在变量窗口中显示对象的原始结构”)。
  • @TimSchmelter,在我的 LinqPad 中,它确实使用了覆盖的 ToString() 而没有 [DebuggerDisplay] 属性。虽然没有检查VS。
  • 可能是,尽管该特定设置似乎没有什么不同。使用这个属性确实可以 -)
  • 请注意,在某种程度上限制它可能是一个好主意,例如它是一个 List 的情况,其中 T 是一个 ToString() 实现执行缓慢的类,这可能会导致不必要的延迟(或者在第一次超时后停止工作)。 return string.Join(",", this.Take(20)) + this.Count &gt; 20 ? "..." : ""; 之类的东西应该修复
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-25
  • 2012-10-13
  • 2018-04-05
  • 2017-04-15
  • 1970-01-01
相关资源
最近更新 更多