C# in Depth by Jon Skeet, pub. Manning Press, ISBN 1933988363.
This book is a tremendous work for understanding how the most important features of the C# language work. Skeet's been a prolific poster in the C# forums on MSDN for some years now, providing answers, tips and tricks, and in-depth advice to a large number of forum visitors. This book wraps up his great knowledge of the inner workings of C# and hands it over to readers in a well-written, concise, usable book.
Skeet uses a very nice formula for the features of C# 2 and 3: he starts with demonstrating solutions to practical problems in C# 1 then shows the progression of that same solution through C# 2 and C# 3. His walk through of the evolution of delegates through 1, 2, and 3 is a perfect example of this: start with the very wordy, somewhat clunky handling in C# 1 and end up with C# 3's lamba expressions.
One of the many fine things about this book is Skeet's ability to clearly cover complex topics like Lambdas and expression trees at exactly the right level. Readers will be able to pick up the power, complexity, and benefits of language features because Skeet's kept the examples practical and the text conversational. With potentially complex topics it's too easy for authors to fall into trivial examples, or dive into overly academic discussions; Skeet does neither. He also does a terrific job of covering the cons of particular issues -- something I'm a big fan of since it helps me make informed decisions.
Part of the book's success is Skeet's solid focus on the book's topics. He stays directed on to language features and doesn't digress into software engineering or construction. As a result, in roughly 360 concise pages he's able to hit all the major goodies like generics, delegates/lambdas, nullable types, extension methods, and LINQ. He closes the book with a nicely laid out, thoughtful discussion of C# 3's benefits and its possible future.
This is a great book for understanding how some of the more fundamental features of C# are implemented, and how to best use them. This book definitely belongs on your bookshelf, right next to Bill Wagner's Effective C# and More Effective C# .
(I'd love to see Wagner and Skeet in a room full of VB6 programmers, diving into a deep discussion of anonymous methods, expression trees, and lambdas. Watching all the VB6ers heads explode would be great entertainment.)