I've often wished for real world guidance on exceptions handling in .net applications. Deciding on a strategy for throwing and catching exceptions is tricky. On the one hand exceptions are said to be the better way of handling execution errors in code. On the other hand, exceptions bring with them the overhead of instantiating them and throwing them which could negatively affect performance.
The whole thing isn't very long and contains a few humbling surprises. I recommend it.