How and when to use exceptions is something that's been an ongoing subject for debate for a long time.
On one hand, exceptions are very handy and convenient. They help keep methods streamlined, with fewer nesting levels in the code. And exceptions leave methods free to return values that are not status codes (e.g., a "Succeeded" code or an error code), which makes code easier to read.
On the other hand, there is typically some amount of overhead involved in the whole exception handling and trapping paradigm, which can slow code execution. And then there is the strict-OO position that exceptions are akin to "Goto" statements, and therefore something that should be avoided on general principle.
How do people feel about exceptions in .NET? From what I've seen, they seem to be rather popular. I regularly see exceptions used in cases where a status code would work equally well. In fact, .NET seems to be rather "exception-happy".
Has anyone come up with any good rules-of-thumb for when or when not to use exceptions in .NET?