हममें से वे जो वीबी/VB.NET में काम किया है इस abomination के समान कोड को देखा है:क्या वीबी.नेट "अगर" ऑपरेटर मुक्केबाजी का कारण बनता है?
Dim name As String = IIf(obj Is Nothing, "", obj.Name)
मैं कहता हूँ तीन सरल कारणों के लिए "abomination":
IIf
एक है फ़ंक्शन, जिनके पैरामीटर का मूल्यांकन किया जाता है; इसलिए यदिobj
उपर्युक्त कॉल में कुछ भी नहीं है तोNullReferenceException
फेंक दिया जाएगा। यह किसी ऐसे व्यक्ति के लिए अप्रत्याशित व्यवहार है जो सी # जैसी भाषाओं में लघु-सर्किट टर्नरी ऑपरेटरों के आदी है।- क्योंकि
IIf
एक फ़ंक्शन है, इस प्रकार यह फ़ंक्शन कॉल के ओवरहेड को घुमाता है। फिर भी, हालांकि यह एक बड़ा सौदा नहीं है, यह किसी ऐसे व्यक्ति के लिए सही नहीं लगता है जो भाषा के लिए अंतर्निहित एक टर्नरी ऑपरेशन के रूप में व्यवहार करने की अपेक्षा करता है। IIf
गैर सामान्य है और इसलिए प्रकारObject
है, जो निम्नलिखित कॉल बॉक्स (मेरा मानना है कि) तीन पूर्णांकों की कुल इसका मतलब के मापदंडों स्वीकार करता है:' boxes 2nd and 3rd arguments as well as return value '
Dim value As Integer = IIf(condition, 1, -1)
अब, वीबीएनईटी के कुछ और हालिया संस्करण में (मुझे यकीन नहीं है कि संख्या क्या है), If
ऑपरेटर पेश किया गया था, जो IIf
फ़ंक्शन के समान ही काम करता है लेकिन (जैसा कि मैं इसे समझता हूं) उसी शोर के बिना tcomings। ऐसा कहने के लिए, शॉर्ट-सर्किटिंग प्रदान करता है और एक इंट्रिनस्टिक वीबी ऑपरेशन है। हालांकि, मुझे अंतिम भाग के बारे में निश्चित नहीं है। MSDN documentation यह इंगित नहीं करता है कि If
इसके तर्कों को बक्से या नहीं। क्या कोई जानता है?
+1 यह प्रश्न मजेदार था! –