One of the features of the .net CLR that I love the best is structured exception handling. Having worked largely on ASP / VBScript / VB applications prior to moving to C# / .net, the ability to catch and handle every type of error that can occur has proved invaluable.
Most of the .net applications I've worked on so far have been relatively simple, with very few interface boundaries and therefore I've not had to worry too much about catching exceptions until they bubble to the UI. The current project I'm working on, however, involves properly stuctured DAL / BLL and UI layers, plus I've been implementing provider patterns for a variety of components. One of my sources of information / inspiration has been the source code for .Text, where I noticed a number of classes the used a try...finally block without any catch. At first this looked a bit odd, until I came across this article on Ian Griffith's weblog.
So, if his closing remark (If it's news to you that your finally blocks should be outnumbering your catch blocks by a significant margin, then you're probably doing something wrong) applies to you, check it out.