I was expecting this book to be a lot like Andy Koenig and Barbara Moo's Accelerated C++, but for C#. It bears almost no resemblance at all which, although disappointing, doesn't make this a bad book. Well, not all of it anyway.
I found the first three chapters dull and boring. This was probably because I've read a number of introductory books on C# over the last few months and usually look forward to getting straight into some code (just like in Accelerated C++), rather than going over the details of .Net. These details are important, but do they really require 3 chapters over 33 pages?
Chapter 4, Classes, Structs and Objects, is where it all starts happening. From this point on the book is informative, detailed in a good way and interesting. The chapter on interfaces and contracts is particularly good, with some emphasis on how interfaces define contracts.
This book, like so many others, mentions the singleton pattern. I'll begrudgingly permit the suggestion that there's nothing intrinsically evil in "mentioning" singleton. However, yet again there is absolutely no mention of the downside of using the singleton pattern. When you consider that in the view of many of the best developers these downsides are considered so bad that singletons are avoided at all costs, this is a fairly large flaw in the book.
The final chapter is entitled "In Search of C# Canonical Forms". This is 50+ pages of effective C# type items. The item that sticks out as being wrong is the suggestion that using the NVI (Non-Virtual Interface) interface is a good thing. Some people, including Herb Sutter, agree that NVI is a good thing. Many of the rest of us think it adds unnecessary code overhead and the need for strangely named protected methods. Again, only one side of the argument is given.
I think that overall this is a good book. The author knows his stuff and is good at presenting it for the most part. Personally I would like to see the first three chapters reworked and shortened, the singleton pattern either dropped or both sides of the argument given and the final chapter replaced with a reference to Wagner's Effective C#.