Is either one of these risky? Is one better? Or is it one of those things you print out and throw a dart at to decide?
I want to do this now that I understand how finally works:
try {
stuff that changes something...
}
catch (System.Exception ex) {
something.worked = false;
something.err = ex.Message;
}
finally {
stuff.close();
return something;
}
But I've seen:
try {
stuff that changes something...
return something;
}
catch (System.Exception ex) {
something.worked = false;
something.err = ex.Message;
return something;
}
finally {
stuff.close();
}
You can't return
from finally
. You will get compiler error:
Control cannot leave the body of a finally clause
If target class implements IDisposable
then I would do next:
using (stuff s = new stuff())
{
return stuff;
}
or
using (stuff s = new stuff())
{
try
{
// do stuff
return stuff;
}
catch (Exception ex)
{
// do logging or another stuff
return something;
}
}
will call Dispose()
for you if that will be required/possible.