यहां जो समस्या देखी गई है, वह अधिक सामान्य समस्या का एक विशेष मामला है, जो यह है कि समानता की विभिन्न परिभाषाओं की संख्या जो कम से कम कुछ परिस्थितियों में उपयोगी हो सकती है, उन्हें व्यक्त करने के लिए आमतौर पर उपलब्ध साधनों की संख्या से अधिक है। यह समस्या कुछ मामलों में एक दुर्भाग्यपूर्ण विश्वास से बदतर हो गई है कि यह समानता के परीक्षण के विभिन्न साधनों के अलग-अलग परिणाम प्राप्त करने के लिए भ्रामक है, और समानता के विभिन्न रूपों के होने से इस तरह के भ्रम से बचा जा सकता है जब भी संभव हो।
वास्तव में, भ्रम का मूल कारण एक गलत धारणा है कि समानता और असमानता परीक्षण के विभिन्न रूपों को एक ही परिणाम प्राप्त करने की अपेक्षा की जानी चाहिए, इस तथ्य के बावजूद कि विभिन्न परिस्थितियों में विभिन्न शब्दार्थ उपयोगी होते हैं। उदाहरण के लिए, एक अंकगणितीय दृष्टिकोण से, यह उपयोगी होने के लिए सक्षम है 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कुछ अशक्त होने पर परीक्षण करना चाहिए ।