IComparable केवल एक ही तरह से काम करता है
मान लीजिए कि आपके पास एक Employeeवर्ग है। एक दृश्य में, आप Employeesनाम के आधार पर सभी को दिखाना चाहते हैं - दूसरे में, पते से। आप इसे कैसे प्राप्त करने जा रहे हैं? साथ नहीं IComparable, कम से कम किसी मुहावरेदार तरीके से तो नहीं।
IComparable गलत जगह तर्क है
इंटरफ़ेस का उपयोग कॉल करके किया जाता है .Sort()। Customerनाम के आधार पर छांटे गए दृश्य में , यह बताने के लिए कोई कोड नहीं है कि यह कैसे छंटने वाला है।
दूसरी ओर, Customerवर्ग यह मान रहा है कि इसका उपयोग कैसे होने जा रहा है - इस मामले में, कि इसका उपयोग नामों द्वारा क्रमबद्ध सूची में किया जाएगा।
IComparable अंतर्निहित रूप से उपयोग किया जाता है
विकल्पों के साथ तुलना में, यह देखना बहुत मुश्किल है कि तुलनात्मक तर्क का उपयोग कहां किया जा रहा है - या यदि बिल्कुल भी। अपने मानक आईडीई को मानकर और Customerकक्षा से शुरू करके मुझे करना होगा
- सभी संदर्भों के लिए खोजें
Customer - उन संदर्भों को खोजें जो एक सूची में उपयोग किए जाते हैं
- जांचें कि क्या उन सूचियों ने कभी उन पर
.Sort()कॉल किया है
यदि आप IComparableअभी भी उपयोग किए जा रहे क्रियान्वयन को हटाते हैं, तो आपको शायद अधिक बुरा लगता है, आपको कोई त्रुटि या चेतावनी नहीं मिलती है। केवल एक चीज जो आपको मिलेगी, वह सभी जगहों पर गलत व्यवहार है जो आपके बारे में सोचने के लिए बहुत अस्पष्ट थी।
ये मुद्दे संयुक्त, प्लस बदलती आवश्यकताएं हैं
मैं इस बारे में सोचने के लिए आया था क्योंकि यह मेरे लिए गलत था। मैं IComparable2 साल से अपने आवेदन में खुशी से उपयोग कर रहा हूं । अब, आवश्यकताओं को बदल दिया गया है और बात को 2 अलग-अलग तरीकों से हल करने की आवश्यकता है। यह देखा है कि यह पिछले अनुभाग में वर्णित चरणों से गुजरने में कोई मज़ा नहीं है।
प्रश्न
ये मुद्दे मुझे किसी भी वैध उपयोग के मामले को न देखने के विकल्प के IComparableरूप में IComparerया उससे भी कमतर के बारे में सोचते हैं .OrderBy(), जो विकल्पों द्वारा बेहतर तरीके से नहीं परोसा जाएगा।
क्या IComparerLINQ का उपयोग करना हमेशा बेहतर होता है , या ऐसे फायदे / उपयोग के मामले हैं जो मैं यहाँ नहीं देख रहा हूँ?
IComparableअब और उपयोग नहीं करेंगे, जो मेरी बात को पुष्ट कर रहा है।
SortedXXXसंग्रह का उपयोग करते हैं , तो उन्हें या तो संग्रहीत तत्वों की आवश्यकता होती है IComparableया एक IComparerप्रदान की जाती है। यह भी ध्यान दें, कि एक तुलनित्र के साथ प्राकृतिक क्रम क्रम को उल्टा करना तुच्छ है और यह सभी IComparableवस्तुओं के साथ काम करता है।
IComparableमाना जाता है। का उपयोग तब किया जाता है जब आप डिफ़ॉल्ट तुलना तंत्र को ओवरराइड करना चाहते हैं। IComparer
ReverseComparer<T>: gist.github.com/jackfarrington/078e7af7bc82482aa634