As many of you already know, extension methods gives you the ability to write code in such a way that you can call a.ExtensionMethods() while ExtensionMethods is with such signature
public static ExtensionClass { public static return_type ExtensionMethod(this class_type a); }
and we all know if we know if instance "a" is null, the call to ExtensionMethods would fail with NRE (NullReferenceException) if the ExtensionMethods is a member method. but will that fail on ExtensionMethod?
Let's make some extension methods
public static class ExtensionMethodsOnNullReferences { public static bool IsNull(this object x) { return x == null; } public static bool IsNullOrEmpty(this string text) { return string.IsNullOrEmpty(text); } }
Which basically check if the extended object is null or Empty String (in the case of IsNullOrEmptyeString).
Here is the test code
public static void DemoExtensionMethodsOnNullReferences() { object nullObj = null; string nullString = null; Console.WriteLine("{0} (expected True) == nullObj.IsNull()", nullObj.IsNull()); Console.WriteLine("{0} (expected True) == nullString.IsNullOrEmpty()", nullString.IsNullOrEmpty()); }
As you can see, it does not throw the NRE exception, but rather peacefully exected the code.
Design Guide. With the speciality when dealing with Null Reference regardin extension method, It is recommended to check for nullity (with the help of ExtensionMethod) and throw ArgumentNullException rather than NullReferenceException....