I've been reading through "Practical .NET2 and C#2" (by Patrick Smacchia). I finished my previous book ("Why Programs Fail" by Andreas Zeller) a little while ago.

I'm impressed with the book. It's not a C# reference, although it describes new features in C# 2.0. And it's not an MSDN reference. It focuses much more on concepts and practical tips. Things that I liked:

  1. It touches on an amazing breadth of topics. I learn several things new things each chapter. (there's a lot to learn about the CLR).
  2. I'm impressed with the concentration of good points. For example, in the middle of a section on Collections (pg 483), he compares System.Collections.Specialized.StringCollection to System.Collections.Generic.List<String> and raises the question: which should you use? And then goes on to provide a useful answer.
  3. It's practical. For example, at the end of the section of Collections, it has a nice table mapping between V1.1 non-generic collections and their corresponding V2 generic collections. It also has good use of tables and screen-shots which make skimming through to find a specific item much easier.
  4. It's really like a tour guide through Whidbey. The book hits a lot of different topics but doesn't dwell on any topic too long. The book is huge at about 850 pages. It gives a much more structured exposure than just randomly jumping into the middle of MSDN and clicking random links.
  5. It has a few pages about debugging support in your programs (pg 510 - 517) from the System.Diagnostics namespace. It mentions the debugger display attributes, Just-my-code, the debuggable attribute, and using Trace.WriteLine / Trace listeners.

The one issue I've noticed is that sometimes the language is a little awkward. The big picture concepts and points make a lot of sense; I just don't dwell on any one specific sentence. That's hardly a problem. Overall, it's a very educational book with an amazing breadth of knowledge and a nice tour guide through Whidbey.