Debugger visualizer for any ICollection and IColle

2019-03-30 10:50发布

问题:

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" )]