मैं एक Silverlight अनुप्रयोग है कि 2 तार तुलना किसी कारण से जब मैं का उपयोग में एक शर्त है ==
यह रिटर्न झूठी जबकि .Equals()
रिटर्न सच ।
यहाँ कोड है:
if (((ListBoxItem)lstBaseMenu.SelectedItem).Content.Equals("Energy Attack"))
{
// Execute code
}
if (((ListBoxItem)lstBaseMenu.SelectedItem).Content == "Energy Attack")
{
// Execute code
}
ऐसा होने का कोई कारण?
==
, लेकिन ऑपरेटर बहुरूपी नहीं होते हैं। इस कोड में, ==
ऑपरेटर को टाइप पर आमंत्रित किया जाता है object
, जो एक मान के बजाय एक पहचान तुलना करता है।
==
के संकलन-समय प्रकार के आधार पर एक अधिभार चुनता है। Content
संपत्ति है object
। ऑपरेटर्स वर्चुअल नहीं होते हैं, इसलिए डिफॉल्ट इम्प्लीमेंटेशन ऑफ़ ==
कॉल कहा जाता है, जिससे रेफरेंस इक्वैलिटी की तुलना की जाती है। बराबरी के साथ, कॉल वर्चुअल विधि पर जाता है object.Equals(object)
; string
इस पद्धति को ओवरराइड करता है और स्ट्रिंग सामग्री पर क्रमिक तुलना करता है। Msdn.microsoft.com/en-us/library/fkfd9eh8(v=vs.110).aspx और referenceource.microsoft.com/#mscorlib/system/string.cs,507 देखें ।
==
संकलित-समय प्रकार होता है object
और दाहिने-हाथ की तरफ संकलन-समय प्रकार होता है string
, तो C # संकलक को (समस्याग्रस्त, इस मामले में) अधिभार उठाना चाहिए operator ==(object, object)
; लेकिन यह एक संकलन-समय चेतावनी जारी करेगा कि यह अनायास ही हो सकता है। तो संकलन-समय की चेतावनी पढ़ें ! समस्या को ठीक करने के लिए और अभी भी उपयोग करने के लिए ==
, बाएं हाथ की ओर कास्ट करें string
। अगर मुझे सही से याद है, तो चेतावनी पाठ केवल यही बताता है।