Visual Studio Visualizer for IEnumerable<string>
c#, debuggervisualizer, visual-studio-2012
Solution
Visualizers are documented as
Support for generic types is limited. You can write a visualizer for a target that is a generic type only if the generic type is an open type.
Which means you cannot write a visualizer that uses a closed constructed type like `IEnumerable<string>`.
Have you tried setting the target type to `IEnumerable<>` then checking to see if the elements are of type `string`?
Problem
TL;DR Does anyone know how to write a Debug Visualizer for Visual Studio 2012, in C#, so I can visualize `IEnumerable<string>`, `string[]` or similar objects? More Info Visual Studio Debug Visualizer are great, and I use some popular ones (Mole) regularly. However, now the time has come to roll out some custom visualizers. I started off with a simple visualizer for a string: ``` [assembly: System.Diagnostics.DebuggerVisualizer(typeof(My.Namespace.DebuggerSide), typeof(VisualizerObjectSource), Target = typeof(string), Description = "Awesome Visualizer")] ``` the code of DebuggerSide is basically the example from the template: ``` public class DebuggerSide : DialogDebuggerVisualizer { protected override void Show(IDialogVisualizerService windowService, IVisualizerObjectProvider objectProvider) { if (windowService == null) throw new ArgumentNullException("windowService"); if (objectProvider == null) throw new ArgumentNullException("objectProvider"); var data = (string)objectProvider.GetObject(); using (var displayForm = new VisualizerForm(data)) { windowService.ShowDialog(displayForm); } } /// <summary> /// Tests the visualizer by hosting it outside of the debugger. /// </summary> /// <param name="objectToVisualize">The object to display in the visualizer.</param> public static void TestShowVisualizer(object objectToVisualize) { VisualizerDevelopmentHost visualizerHost = new VisualizerDevelopmentHost(objectToVisualize, typeof(DebuggerSide)); visualizerHost.ShowVisualizer(); } } ``` `VisualizerForm` is the custom form with extra controls etc... when I build the project and put the dll in the `My Documents/Visual Studio 11/Visualizers` folder, and restart visual studio, I can indeed see the debugger appearing under the looking glass icon when a breakpoint is hit for a string object. Woohoo! So far so good. Now I would like to, instead of visualizing `string`, visualize `string[]` or `IEnumerable<string>` or a similar object. However when I change the assembly attribute to `IEnumerable<string>`, this is not working, there is not even a looking glass icon displayed on the IEnumerable objects. UPDATE I can get it to work by changing the TargetType to `List<>` and then checking if I can cast to `List<string>`. However, this means I have to cast all my objects I want to debug to `List` and can't use `IEnumerable<>` or string[]