我正在使用构建NameObjectCollectionBase
派生的名称 - 对象对映射的第三方库。该集合有时很大(数千个项目),我想使用VS 2008调试器来检查其中的项目。 (我不是在寻找地图中的特定项目,我正在尝试查看项目列表是否与我期望的一样。)地图包含NameObjectEntry
个实例。当我在调试器中检查这个地图时,这就是我所看到的:
[0] {System.Collections.Specialized.NameObjectCollectionBase.NameObjectEntry}
[1] {System.Collections.Specialized.NameObjectCollectionBase.NameObjectEntry}
...
[191] {System.Collections.Specialized.NameObjectCollectionBase.NameObjectEntry}
[192] {System.Collections.Specialized.NameObjectCollectionBase.NameObjectEntry}
我想知道是否有办法告诉调试器如何格式化NameObjectEntry
以向我显示实例内的数据,而不是类型名称。类似的东西:
[0] {"key1","value1"}
[1] {"key2","value2"}
...
[191] {"key191","value191"}
[192] {"key192","value192"}
使用我自己的类,我可以覆盖ToString()
或使用DebuggerDisplay
属性,但NameObjectEntry
是.NET框架的一部分,我无法更改它。不幸的是,搜索结果大多推荐这两个中的一个。
有什么办法可以强制调试器以特定的方式显示这个对象吗?
编辑:对于未来的读者,解决方案是使用VS附带的autoexp.cs
文件,如下所述:
http://msdn.microsoft.com/en-us/library/x810d419%28VS.90%29.aspx
答案 0 :(得分:2)
是的,您可以使用DebuggerDisplay
属性。当您可以访问该类的源代码时,这很容易。请查看此链接以获取更多信息:http://msdn.microsoft.com/en-us/library/ms228992.aspx。
如果您无法访问源代码,可以尝试执行以下操作:
DebuggerDisplay
属性应用于派生类,并在应用程序中使用此类(而不是外部类)所以,我们假设您有一个名为SampleExternalClass
在您自己的代码中,您应该创建一个派生类:
[DebuggerDisplay("custom formatted object with string = { StringPropertyNameFromBaseClass } ")]
class SampleInternalClass : SampleExternalClass
{
//you don't have to put anything in here
}
在这些步骤之后,当您在调试器中使用SampleInternalClass
类型的视图对象时,它应该按照属性中的指定进行格式化。
当两个类都在同一个dll中时,这似乎有效,但我认为它应该适用于单独的dll。