I've got a class which inherits from a List<MagicBean>
. It works well and as expected in all respects except one: when I add the [DebuggerDisplay]
attribute. Even though looking at List has its as [DebuggerDisplay("Count = {Count}")]
, if I so much as copy and paste that onto mine, I lose the ability to look directly at all of the MagicBeans I have without drilling into base->private members while debugging.
How do I get the best of both worlds? IE: Custom value in the value column, and Visual Studio not hiding my magic beans from me?
Use the DebuggerDisplay attribute like so:
Some more info here.
After looking at the "Using DebuggerDisplay Attribute" article on MSDN, they suggest that you could override the ToString() function of your class as an alternate option rather than using DebuggerDisplay attribute. Overriding the ToString() method won't hide your beans either.
Are you able to override the ToString() method on your class or are you using it for other purposes?
I don't know if you've already considered this or not, but I thought I'd suggest it just incase it helps. :-)
For completeness so anyone else can quickly mock it up; here's a quick example that I made:
You can get the effect you need by using the DebuggerTypeProxy attribute. You need to create a class to make a debug "visualisation" of your inherited list:
You can then declare this class to be used by the debugger for displaying your class, along with the
DebuggerDisplay
attribute:This will give you the "Count = 3" message when you hover over an instance of your inherited list in Visual Studio, and a view of the items in the list when you expand the root node, without having to drill down into the base properties.
Using
ToString()
to specifically get debug output is not a good approach, unless of course you are already overridingToString()
for use in your code elsewhere, in which case you can make use of it.