Debugger visualizer for any ICollection and ICollection<T> types

拥有回忆 提交于 2019-12-05 00:53:11

问题


I created form with grid to visualize any collection (ICollection, ICollection<T>) object.

After that I created debugger visualizer class (inherits from Microsoft.VisualStudio.DebuggerVisualizers.DialogDebuggerVisualizer).

The visualizer is installed propertly (I tried it on System.Collections.ArrayList class).

But I have problem with generalize the visualizer to any ICollection/ICollection<T> type.

I specified attribute:

[assembly: DebuggerVisualizer( typeof( DebugerSide ), typeof( VisualizerObjectSource ), Target = typeof( System.Collections.Generic.ICollection<> ), Description = "Collection visualizer" )]
[assembly: DebuggerVisualizer( typeof( DebugerSide ), typeof( VisualizerObjectSource ), Target = typeof( System.Collections.ICollection ), Description = "Collection visualizer" )]

but the visualizer is not offered by VS in debug.

If I specify exactl class name, the visualizer is available in VS. Is there way, how to perform my intention or there is no way, how to achieve it?

Thanks!


回答1:


I think you've stumbled into the same limitation of the Visualizers architecture as outlined in this question.

The workaround is to create a Visualizer for System.WeakReference, and then to type in the Watch window "new WeakReference(myCollectionVariable)", and then you will be able to open your debug visualizer on the weakreference. Inside your debug visualizer you can use reflection to find out what exactly the type of your variable is, and do whatever you want with it.

See also this.




回答2:


This will work fine i guess.

[assembly: DebuggerVisualizer( typeof( DebugerSide ), typeof( VisualizerObjectSource ), typeof(Collection), Description = "Collection visualizer" )]


来源:https://stackoverflow.com/questions/6506819/debugger-visualizer-for-any-icollection-and-icollectiont-types

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!