I didn't fully embrace extensions when the were introduced, I'm finding out that was a mistake. I have started a small library with extensions for the string and exception classes. I'm sure as time goes on this library will grow. One of the things I like the most is how innocuous you can make them. You put them in your own namespace and they'll never bother anyone, but they can always come to your aid when summoned.
Recently I was working with Entity Framework and got a Validation Error. Finding out how to retrieve the actual errors was not intuitive and is exactly the kind of thing I immediately forget after I write it. Then I need it again in a future project, so I either write a blog so I can remember or I go searching through Subversion. Now, when appropriate I can just add it to my extension library. Inside my Syncor.Extensions.ExceptionExtensions class I recently added the following two extension methods (the first one was inspried by this answer at StackOverflow).
You could easily make this one method if you wanted. I just find it more flexible and easier to understand when broken apart. Not only will I never forget how to do it, I won't need to remember, and the code that uses this is now pretty clean:
Another useful exception extension is one that chains together the immediate extension message and any messages from inner extensions. It looks like this
The use of this extension might look like: