2009-07-02 15 views
8

मेरे पास class MyObj : IComparable के साथ List<MyObj> है। मैंने MyObj कक्षा इंटरफ़ेस में CompareTo विधि को लिखा है, लेकिन जब मैं List<MyObj>.Contains(myObjInstance) का उपयोग करता हूं तो यह false देता है जब यह true होना चाहिए।सूची संशोधित करें। व्यवहार

मुझे यकीन नहीं है कि मुझे यह समझने के लिए आगे बढ़ने की आवश्यकता है कि ListContains फ़ंक्शन पर कॉल करते समय मेरी कस्टम तुलना विधि का उपयोग करता है।

#region IComparable Members 

    public int CompareTo(object obj) 
    { 
     MyObj myObj = (MyObj)obj; 
     return String.Compare(this.Symbol, myObj.Symbol, true); 
    } 

    #endregion 

नोट प्रतीक संपत्ति एक स्ट्रिंग है:

यहाँ मेरी compareTo कार्यान्वयन है।

स्पष्टीकरण के लिए मैंने तुलना में एक रोक बिंदु रखा है विधि के लिए और यह वहां भी नहीं जाता है।

किसी ने कभी कोशिश की है?

धन्यवाद।

+0

क्या आप हमें अपना कोड दिखा सकते हैं? –

+0

विशेष रूप से तुलनात्मक –

उत्तर

22

यह पता लगाने का सबसे आसान तरीका है कि आपकी तुलनात्मक विधि कहां है, इसमें ब्रेकपॉइंट सेट करना है और अपने प्रोग्राम को चलाने के लिए F5 दबाएं। लेकिन मेरा मानना ​​है कि List<T>.Contains तुलना करने के लिए IEquatable<T> इंटरफेस की तलाश में है।

+0

का कार्यान्वयन किया गया। यह वहां नहीं रुकता है। :( – Lancelot

+0

@ लांसलोट: दूसरी वाक्य भी पढ़ें; ओ) –

+0

क्षमा करें मैं थोड़ा तेज़ पढ़ता हूं। मैं कोशिश करूँगा और आपको बता दूंगा। धन्यवाद। :) – Lancelot

2

क्या आपने बराबर विधि को ओवरराइड करने का प्रयास किया था?

List<T>, परावर्तक के अनुसार, EqualityComparer<T> का उपयोग रोकथाम की जांच के लिए करता है, और डिफ़ॉल्ट कार्यान्वयन (ऑब्जेक्ट एक्वालिटी कॉम्पैयर) अधिकांश सामान्य वस्तुओं के बराबर उपयोग करता है।

5

List<T>.Contains के लिए documentation के अनुसार, यह या तो IEquatable इंटरफ़ेस या object.Equals के अपने कार्यान्वयन का उपयोग करता है, कि तुम रूप में अच्छी तरह ओवरराइड कर सकते हैं।

संबंधित मुद्दे