2009-11-01 10 views
29

में दो तत्वों की तुलना करने में विफल रहा मेरे पास List<T> है जहां T एक वर्ग है जो "उपयोगकर्ता नाम" संपत्ति का खुलासा करती है। उपयोगकर्ता नाम एक कस्टम प्रकार का है जो एक स्ट्रिंग को समाहित करता है।सरणी

AllUsers=CollectionViewSource.GetDefaultView(myList); 

मैं एक Sortdescription कहा::

AllUsers.SortDescriptions.Add(new SortDescription("Username",ListSortDirection.Ascending)); 

इस पंक्ति पर मुझे लगता है कि बस रिटर्न

this.encapsulatedString.CompareTo(other.encapsulatedString) 

मैं इस प्रकार सूची का एक ICollectionView परिभाषित इस कस्टम प्रकार पर IComparable<T> इंटरफ़ेस कार्यान्वित कोड शीर्षक में उल्लिखित अपवाद फेंकता है। मैं बिना किसी समस्या के अन्य माध्यमों से सूची को सॉर्ट कर सकता हूं। अपवाद कहां से आ रहा है?

उत्तर

46

Stupidstupidstupid: कस्टम प्रकार IComparable<T> के रूप में ऐसा लगता है SortDescription

मैं कुछ ज्यादा जरूरत नींद पाने के लिए जा रहा हूँ compareTo

की पुराने जमाने गैर जेनेरिक संस्करण का उपयोग करता IComparable को लागू करने के साथ ही है ...

+0

यदि आप चाहें तो अपने प्रश्न को बंद करने के लिए स्वतंत्र महसूस करें ... – Noldorin

+37

नहीं, बंद न करें। कोई और एक ही समस्या में चला सकता है – erikkallen

+4

+1 हाँ मेरे जैसे ... इसे खोलने के लिए धन्यवाद। :-) –

0

जैसा कि आपने कहा था, आपको गैर-जेनेरिक IComparable को लागू करने की आवश्यकता है। यदि आप इस इंटरफेस को एक अच्छे सामान्य तरीके से कार्यान्वित करना चाहते हैं तो आप तुलनात्मक < टी > कक्षा का उपयोग कर सकते हैं :)

4

आपका उत्तर जो मैं बता सकता हूं उससे सख्ती से सही नहीं है। मेरी वस्तुएं आईसीओमेरेबल या आईसीओम्पेर्बल को बिल्कुल लागू नहीं करती हैं और वे अभी भी ठीक काम करते हैं। मैं एक संग्रह दृश्य संसाधन बना रहा हूं और आपके जैसे सॉर्ट विवरण जोड़ रहा हूं और यह त्रुटि नहीं प्राप्त कर रहा हूं। मुझे त्रुटि मिल रही थी क्योंकि सॉर्ट विवरण में संपत्ति खाली थी। एक बार मैंने यह तय कर लिया कि सब कुछ इंटरफ़ेस के बिना ठीक काम करता है। मुझे संदेह है कि शायद आपके पास एक संपत्ति गलत है और यह आईसीओपरपेबल का उपयोग करने के लिए वापस आती है अगर यह संपत्ति तक नहीं पहुंच पाती है।

5

मेरे मामले में, मैंने तुलना फ़ंक्शन के अंदर एक प्रयास/पकड़ ब्लॉक जोड़ा, और कंसोल को अपवाद संदेश प्रदर्शित किया। यदि आपके तुलनात्मक फ़ंक्शन के अंदर कोई बग है, तो आपको यह द्वितीयक अपवाद मिलेगा ("दो तत्वों की तुलना करने में विफल ...")।

मेरी समस्या विशेष रूप से किसी अन्य बग के कारण स्ट्रिंग की स्थिति 3 के अनुक्रमण के साथ अनुक्रमणित थी।

+1

मेरे लिए यह तुलना समारोह के अंदर एक अपवाद के कारण भी था। –

0

मेरे मामले में, object पर क्रमबद्ध संपत्ति को क्रमबद्ध किया गया था, और त्रुटि तब हुई जब कुछ ऑब्जेक्ट int एस थे और अन्य string एस थे।

मैं IComparable लागू किया जा सकता था किया है, लेकिन कक्षा के उपयोग वास्तव में अधिक स्ट्रिंग में सक्षम था - मैं string को object बदलने के लिए, और यह सुनिश्चित करें कि संख्या .ToString() कहा जाता है का उपयोग करके सभी setters बनाने के लिए सक्षम था, और यह सब वहाँ से स्थापित किया गया था ।