I was debugging in Visual Studio 2010, which we just installed and trying to look at a dictionary in the quick watch window. I see Keys and Values, but drilling into those shows the Count and Non-Public members, Non-Public members continues the trail and I never see the values in the dictionary. I can run test.Take(10) and see the values, but why should I have to do that. I don't have VS 2008 installed anymore to compare, but it seems that I could debug a dictionary much easier. Why is it this way now? Is it just a setting I set somehow on my machine?
Test code:
Dictionary<string, string> test = new Dictionary<string, string>();
test.Add("a", "b");
EDIT: I've just tried the same debug in a Console app and it works as expected. The other project is a Silverlight 4 application, why are they different?
Silverlight 4 Debug Screen Shot:
EDIT: Reply from Microsoft Connect: "This was an omission on our part - we had previously fixed this exact issue for Visual Studio 2008 SP1, but this fix was unfortunately not ported to the Visual Studio 2010 codebase. This is now fixed again (this time for good!) and we're looking into shipping this fix in VS2010 SP1.
Alex Turner Program Manager Visual Basic and C# Compiler" So it should be fixed soon.
EDIT: I've just double checked this in SP1 and it is working correctly.
There is a workaround to dump the contents of the dictionary in the debugger.
To your project, add a reference to the linq dll (e.g. System.Core)
Add the following statement to your source file:
using System.Linq;
In the watch window, type:
test.Take(1)
Then expand the "Results View" group row. This should give you the familiar list of key, value pairs.
[This workaround was reported by rickpastoor on connect.microsoft.com for Bug 557741]
The debugger visualizer for Dictionary is the exact same class with the exact same behavior. It is still the private Mscorlib_DictionaryDebugView class. Unexpanded it shows Count, expanded it shows an array of the elements.
Your code snippet suggests that you are using a completely different Dictionary class, one that is not generic.