在Visual Studio中:为什么QuickWatch窗口会添加&#34; Mscorlib_CollectionDebugView&#34;列出<t>元素表达式?

时间:2016-09-13 22:49:17

标签: c# .net visual-studio debugging visual-studio-debugging

例如:

var p = new {
    rg = new List<string> {
        "one",
        "two",
    }
};

QuickWatch p,然后点击树中的p.rg[0]

表达式变为:new System.Collections.Generic.Mscorlib_CollectionDebugView<string>(p.rg).Items[0]

这是什么废话,我该如何摆脱它?

1 个答案:

答案 0 :(得分:0)

“表达式”文本框显示您在树中选择的任何节点的全名。如果您只想查看所选的值,则全名是您需要评估的表达式 List<T>不是数组,实际上没有名为“[0]”的成员。如果您查看“原始视图”,您将看到List<T>的实际实现成员。大多数人不关心实现,只想查看列表中的项目。因此,List<T>有一个DebuggerTypeProxy。类型代理允许在调试器中自定义对象的视图。对于List<T>,类型代理为Mscorlib_CollectionDebugView。为了直接评估元素0,您需要实例化类型代理,然后获取元素0的值(TypeProxy.Items[0])。