Covariance and contravariance are precise terms that describe which conversions are safe on parameters and return types. Learn practical definitions for those terms, what new constructs will be supported in C# 4.0 and how to live with the current limitations until Visual Studio 2010 is adopted by your organization.
There are multiple ways to solve every problem. Strive for code that communicates your intent and makes your meaning clear for every developer who uses it.
Taking a careful look at the capabilities the compiler gives to anonymous types provides an excellent tutorial on what you should consider when you create your types -- including whether they are classes or structs.
Lambda expressions are nothing more than convenient syntax for delegates. So why can't you use them where the Framework expects a delegate? And more importantly, what can you do about it?
Many developers have the misconception that targeting older versions of the Framework means you can't use any of the new C# language features. It's time to dispel that myth.
Chances are C# is not your first programming language. Here are several tips that can help you leverage C# better if you already know VB.NET.
Mixing generics and functional programming simplifies writing some extensibility libraries tremendously. For example, combining these techniques makes it easy to create a generic Undo library.
Sometimes it makes more sense to separate functionality you use repeatedly into its own component. Learn how to create a special command-line processing component.
Take advantage of C#'s Item Templates to automate tasks that you find yourself having to perform on a regular basis.
Language features aren't good or bad. The choice of language feature depends on what you're doing. In this issue, we dive into the methods vs. properties debate.
You probably write a lot of code to test object state. A better approach might be to make your objects report their own state.
Learn how to construct a generic class that mandates behavior from type parameters that aren't expressible in the standard constraint types.
Take advantage of new features in C# 3.0 that let you treat code as data -- and save time over more traditional, imperative approaches to programming.
Take advantage of functional programming techniques like Filter, Map, and Reduce in your day-to-day business apps.
Take advantage of the new keywords associated with C# 3.0's query syntax. Learn how these keywords map to methods defined using the query operands, and how you can define your own custom implementation for the query keywords.