Question: What is the difference (if any) in writing:

```
if (File.Exists(filePath)) 
    //Something
else
    throw new FileNotFoundException();

```

And surrounding the if/else block, above, in a try brace with a catch. 

In fact, is the catch needed? If so, what would it catch? Or perhaps a better comparison is to put the if part of the above block in a try brace (without the if statement) and catch a `FileNotFoundException`, throwing up the call stack (throw).

Thanks

Answer: 
I don't see any reason to throw an exception that would be thrown anyways. It might be more useful to throw an exception with a higher level of abstraction though.
Exception handling is an application concern. If you are interesting in either (a) an exception or (b) a specific exception then you use try/catches.

Since exception handling is many orders of magnitude slower than an if check, and you know the file may not be present, then you can either take the performance hit, or write your code as you have. It's simply your choice in taking the performance hit on the occasions the file isn't present.

There are people who say you should only catch an exception if you can do something about it, and in the main they are correct however there is a certain place I always use exception handling. 

* When returning from across a service
boundary. Sometimes this is security
related (hiding implementation
details) though mostly to improve
runtime diagnostics
* When issuing a call across a service
boundary. This is usually reliability
related, though again most to aid
trouble shooting.

When using exception handling for diagnostics I essentially just log the exception and raise back up.