मैं एक 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। अगर मुझे सही से याद है, तो चेतावनी पाठ केवल यही बताता है।
