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.
The latest iteration of C# introduces a host of new language features, most of which were created to enable functionality that you see in the .NET Framework 3.5's LINQ.
- By Kathleen Dollard
Developers are accustomed to thinking of an object as either existing or not, but the truth is the initialization process is complex enough that this isn't always so.
Learn how to initialize objects properly and avoid small missteps that can lead to big problems when creating and initializing objects.
You can't predict change, but you can prepare for it. Learn how to avoid cases where you need to remove work and rework too much of what you've already done.
Your code is the expression of your design intent -- make sure you communicate
It requires a lot of plumbing to create, manage, and communicate with background threads. The System.ComponentModel.BackgroundWorker class already contains the functionality you need to follow best practices.
Multithreaded programming is difficult because context switches can happen any time. Here are a few techniques to mitigate the chance of failure.
You already know what those new features in C# 3.0 are doing because you do these same things in C# 2.0. Learn how C# 3.0 can reduce coding lines and improve readability by walking through a reverse migration.
Thrown exceptions break the normal flow of execution in a program to report error conditions. A few simple techniques can help you preserve execution flow and give users and administrators the information they need to understand what went wrong.
You can save space and even time by compressing your persistent data store. The interesting trick is to provide this functionality by adapting your current algorithms, rather than completely replacing them.
Generics can solve many more problems than collections. Use generics to write code once and reuse it more easily.