Thursday, 8 November 2012

Reducing code noise when checking for null parameters

The problem with writing defensive fail early code, it doesn't take long before methods are 70% argument checking, 30% logic:

public void Method(object arg1, object arg2)
{
if (arg1 == null)
{
throw new ArgumentNullException("arg1");
}
 
if (arg2 == null)
{
throw new ArgumentNullException("arg2");
}
 
...
...
...
}

Code contracts can be a great way to move code out of the method body, but how can you clean up the code just through traditional refactoring? For the last few projects I've worked on, I've been using a small helper class that abstracts all the conditional code out, leaving just a single line call for each check you need.

public void Method(object arg1, object arg2)
{
Throw.IfNull(arg1, "arg1");
Throw.IfNull(arg2, "arg2");
 
...
...
...
}

String parameter checking can wrap up even more conditional logic. The following code throws an ArgumentNullException if the string is null, or just an ArgumentException if it is empty or whitespace.

Throw.IfNullEmptyOrWhitespace(stringValue, "stringValue");

Get the code from GitHub.

No comments:

Post a Comment