यहां जो समस्या देखी गई है, वह अधिक सामान्य समस्या का एक विशेष मामला है, जो यह है कि समानता की विभिन्न परिभाषाओं की संख्या जो कम से कम कुछ परिस्थितियों में उपयोगी हो सकती है, उन्हें व्यक्त करने के लिए आमतौर पर उपलब्ध साधनों की संख्या से अधिक है। यह समस्या कुछ मामलों में एक दुर्भाग्यपूर्ण विश्वास से बदतर हो गई है कि यह समानता के परीक्षण के विभिन्न साधनों के अलग-अलग परिणाम प्राप्त करने के लिए भ्रामक है, और समानता के विभिन्न रूपों के होने से इस तरह के भ्रम से बचा जा सकता है जब भी संभव हो।
वास्तव में, भ्रम का मूल कारण एक गलत धारणा है कि समानता और असमानता परीक्षण के विभिन्न रूपों को एक ही परिणाम प्राप्त करने की अपेक्षा की जानी चाहिए, इस तथ्य के बावजूद कि विभिन्न परिस्थितियों में विभिन्न शब्दार्थ उपयोगी होते हैं। उदाहरण के लिए, एक अंकगणितीय दृष्टिकोण से, यह उपयोगी होने के लिए सक्षम है Decimal
जो केवल अनुगामी शून्य की संख्या में भिन्नता है। इसी double
तरह सकारात्मक शून्य और नकारात्मक शून्य जैसे मूल्यों के लिए । दूसरी ओर, कैशिंग या इंटर्निंग दृष्टिकोण से, ऐसे शब्दार्थ घातक हो सकते हैं। उदाहरण के लिए, मान लीजिए कि किसी के पास Dictionary<Decimal, String>
ऐसा है जो myDict[someDecimal]
बराबर होना चाहिए someDecimal.ToString()
। यदि किसी के पास बहुत सी वस्तु हो तो यह उचित होगाDecimal
वे मान जो स्ट्रिंग में परिवर्तित करना चाहते थे और उम्मीद थी कि कई डुप्लिकेट होंगे। दुर्भाग्य से, अगर इस तरह के कैशिंग का उपयोग 12.3 मीटर और 12.40 मीटर में परिवर्तित करने के लिए किया जाता है, इसके बाद 12.30 मीटर और 12.4 मीटर होता है, तो बाद के मान "12.3" और "12.40" के बजाय "12.30" और "12.4" होंगे।
मामले में वापस लौटना, समानता के लिए अशक्त वस्तुओं की तुलना करने का एक से अधिक समझदार तरीका है। C # उस दृष्टिकोण को लेता है जिसके ==
ऑपरेटर को उसके व्यवहार को प्रतिबिंबित करना चाहिए Equals
। VB.NET इस दृष्टिकोण को लेता है कि उसके व्यवहार में कुछ अन्य भाषाओं का दर्पण होना चाहिए, क्योंकि कोई भी व्यक्ति जो Equals
व्यवहार का उपयोग कर सकता है Equals
। कुछ अर्थों में, सही समाधान के लिए एक तीन-तरफा "यदि" निर्माण होगा, और यह आवश्यक होगा कि यदि सशर्त अभिव्यक्ति तीन-मूल्यवान परिणाम देता है, तो कोड को निर्दिष्ट करना चाहिए कि null
मामले में क्या होना चाहिए । चूंकि वे भाषाओं के साथ एक विकल्प नहीं हैं जैसा कि वे हैं, अगला सबसे अच्छा विकल्प केवल यह सीखना है कि विभिन्न भाषाएं कैसे काम करती हैं और पहचानती हैं कि वे समान नहीं हैं।
संयोग से, विजुअल बेसिक के "इज़" ऑपरेटर, जिसमें सी की कमी है, का उपयोग यह परीक्षण करने के लिए किया जा सकता है कि क्या एक अशक्त वस्तु वास्तव में, अशक्त है। हालांकि, कोई भी यह सवाल कर सकता है कि if
परीक्षण को स्वीकार करना चाहिए या नहीं Boolean?
, सामान्य तुलना करने वाले ऑपरेटरों के पास लौटने के Boolean?
बजाय Boolean
जब अशक्त प्रकारों के लिए एक उपयोगी विशेषता है। संयोग से, VB.NET में, यदि कोई बजाए समानता ऑपरेटर का उपयोग करने का प्रयास करता है, तो एक को Is
चेतावनी मिलेगी कि तुलना का परिणाम हमेशा रहेगा Nothing
, और किसी को Is
कुछ अशक्त होने पर परीक्षण करना चाहिए ।