The proper way to re-throw an exception.

Good post here.  I didn't know that “throw;” is different than throwing the exception you're handling, but it is different because when you throw it, the call stack leading to the code that did throw it is lost.