Extension Methods with Null Object
I don’t use extension methods that much in the code, but they are very handy in several scenarious. Till yesterday, I didn’t know one important thing about their behavior with null objects.
Imagine following example; does it always throw NullReferenceException?
Person nobody = null;
nobody.GetTelephoneNumberExtension();
Well, duh…it’s so obvious. Or is it? Actually, there is one edge case when the NullReferenceException won’t be thrown and it’s when you use extension methods.
public static class PersonExtensions
{
public static string GetTelephoneNumberExtension(this Person value)
{
if (value == null)
return String.Empty;
else
...
}
}
Calling the extension method on an object doesn’t check for nullity and it’s the syntactic sugar for making a static call. It’s an important and a bit misleading difference between a normal and an extension method. I wouldn’t take an advantage of this behavior, but be aware of it.