Professional .NET 2.0 Generics, by Tod Golding, explains why generics are important to the .NET Framework, explains the differences between .NET generics and C++ templates, and describes how generics are used in C# and VB.NET. Unfortunately, after the first few chapters the book is often difficult to understand, provides incomplete explanations, gives some bad advice, and is occasionally incorrect.
Thus I can’t recommend this book, though it may still be helpful for those who need a basic introduction to generics, or to experienced developers that are looking for the occasional nuggets of interest. For example, I wasn’t certain that protected members were accessible among all “closed constructed types” of a generic class. I also hadn’t explored the ways in which ambiguities can arise with generic method overloads; specifically, I didn’t know that potentially ambiguous methods prevent VB.NET from even compiling a class, whereas C# will not fail until code attempts to call the ambiguous method.