try
{
/* code that could throw an exception */
}
catch (Exception)
{
/* handle the exception */
}
finally
{
/* Code that will be executed, regardless if an exception was thrown / caught or not */
}
The try / catch / finally block can be very handy when reading from files.
For example:
FileStream f = null;
try
{
f = File.OpenRead("file.txt");
/* process the file here */
}
finally
{
f?.Close(); // f may be null, so use the null conditional operator.
}
A try block must be followed by either a catch or a finally block. However, since there is no catch block, the execution will cause termination. Before termination, the statements inside the finally block will be executed.
In the file-reading we could have used a using block as FileStream (what OpenRead returns) implements IDisposable.
Even if there is a return statement in try block, the finally block will usually execute; there are a few cases where it will not:
Environment.FailFast