I’ve had this book for a long time (so long, that there’s now a newer edition out) but only got around to reading it recently, which is a shame, as I think it would have helped me more had I read it when I got it.
As the title suggests, this is a really detailed book, it’s essentially a more human-oriented version of the C# specification, which glosses over very few details, but still manages to present the information such that normal people (and by that I mean ‘people who don’t write compilers for fun’) can understand.
C# In Depth assumes very little of the reader, it starts off all the way back at C# version 1, and each section of the book introduces the changes implemented in the next version, often it uses the same bits of code and compares how it would be written in the different versions of C#, which really demonstrates how much more concise the language has gotten over the years.
As I mentioned earlier, I think it’s a shame I didn’t pick this book up earlier. Some of the topics it covers I learned through trial and experimentation (I’m looking at you, Linq) and the guided and in-depth look the book offers would have been useful. I also noticed that sometimes the book seems to over-explain things (mostly lambda-to-delegate conversion and covariance/contravariance) whilst these are pretty complex topics, I find that it mostly ‘just works’ and that thinking about it too much just leads to confusion (the book also admits this at times), though I imagine I’ll be grateful to have C# In Depth on hand if I’m ever facing down an error related to these things.
All-in-all C# In Depth is a really interesting book that details the evolution of the language over 5 versions, and even if you’re really familiar with C# it’s worth a read just for that, if you’re not that familiar with C# (especially with Linq, the ‘dynamic’ keyword, or the async/await pattern) then this book will teach you everything you could possibly want to know (and then some, most likely) about these cool features.