Exception handling is an important part of any software. In this post, I will talk about a trick to make but some kind of reusability on exception handling.
This post is part of a serie about making C# code shorter
- Part 1 : Extension methods and Linq
- Part 2 : Try Catch and reusability
- Part 3 : C# 3 shortcuts
- Part 4 : Chainable methods
- Part 5 : Parsing and conversion
- Part 6 : Contructor with initializer and event setters
- Part 7 : Post compilation
When you write code, you usually try to reuse your code by creating methods and calling those methods each time you the need their functionality. When working with exceptions, it’s a bit tricky because, they don’t follow the normal code flow, they jump out of your method … unless you catch them. The consequence is that you usually have multiple similar try {} catch {} blocks that are often copied and pasted.
This is what usually happens
public void Method1()
{
try
{
//method 1 content
}
catch (ThreadAbortException)
{
}
catch (IOException ex)
{
//IO exception handling
}
finally
{
//add any code for releasing ressource
}
}
public void Method2()
{
try
{
//method 2 content
}
catch (ThreadAbortException)
{
}
catch (IOException ex)
{
//IO exception handling
}
finally
{
//add any code for releasing ressource
}
}
The solution to reuse the exception block
This is what you could do to reuse the same error handling code block in c# :
public void Method1()
{
Do(() =>
{
//method 1 content
});
}
public void Method2()
{
Do(() =>
{
//method 2 content
});
}
protected void Do(Action method)
{
try
{
//code to call before each methods
method();
//code to call after each methods success
}
catch (ThreadAbortException)
{
}
catch (IOException ex)
{
//IO exception handling
}
finally
{
//add any code for releasing ressource
}
}