जैसा कि अन्य ने बताया है, अशक्त संदर्भ पर एक विस्तार पद्धति को कॉल करने से यह तर्क शून्य हो जाता है और कुछ और विशेष नहीं होगा। यह गार्ड क्लॉस लिखने के लिए विस्तार विधियों का उपयोग करने के लिए एक विचार को जन्म देता है।
आप इस लेख को उदाहरणों के लिए पढ़ सकते हैं: साइक्लोमैटिक जटिलता को कैसे कम करें: गार्ड क्लॉज लघु संस्करण यह है:
public static class StringExtensions
{
public static void AssertNonEmpty(this string value, string paramName)
{
if (string.IsNullOrEmpty(value))
throw new ArgumentException("Value must be a non-empty string.", paramName);
}
}
यह स्ट्रिंग क्लास एक्सटेंशन विधि है जिसे अशक्त संदर्भ पर कहा जा सकता है:
((string)null).AssertNonEmpty("null");
कॉल केवल ठीक काम करता है क्योंकि रनटाइम सफलतापूर्वक विस्तार विधि को शून्य संदर्भ पर कॉल करेगा। फिर आप इस एक्सटेंशन मेथड का इस्तेमाल गंदी सिंटैक्स के बिना गार्ड क्लॉज लागू करने के लिए कर सकते हैं:
public IRegisteredUser RegisterUser(string userName, string referrerName)
{
userName.AssertNonEmpty("userName");
referrerName.AssertNonEmpty("referrerName");
...
}
Cannot perform runtime binding on a null reference
।