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