IComparable শুধুমাত্র একটি উপায় কাজ করে
ধরা যাক আপনার একটা Employeeক্লাস আছে। এক দর্শনে, আপনি Employeesনাম অনুসারে বাছাই করা - অন্যটিতে, ঠিকানার মাধ্যমে দেখতে চান। আপনি কিভাবে এটি অর্জন করতে যাচ্ছেন? সাথে নয় IComparable, কমপক্ষে কোনও অহঙ্কারী পদ্ধতিতে নয়।
IComparable ভুল জায়গায় যুক্তি আছে
ইন্টারফেস কল করে ব্যবহার করা হয় .Sort()। Customerনাম অনুসারে বাছাই করা একটি দৃশ্যে , কীভাবে এটি বাছাই হচ্ছে তা বোঝাতে কোনও কোড নেই।
অন্যদিকে, Customerবর্গটি এটি কীভাবে ব্যবহার করা হচ্ছে তা ধরে নিচ্ছে - এই ক্ষেত্রে, এটি নাম অনুসারে বাছাই করা একটি তালিকায় ব্যবহৃত হবে।
IComparable স্পষ্টভাবে ব্যবহৃত হয়
বিকল্পগুলির সাথে তুলনা করে, তুলনা করার যুক্তিটি কোথায় ব্যবহৃত হচ্ছে - বা তা আদৌ দেখা খুব কঠিন। আপনার মানক আইডিই ধরে এবং Customerক্লাস থেকে শুরু করে , আমাকে করতে হবে
- সমস্ত রেফারেন্স অনুসন্ধান করুন
Customer - একটি তালিকাতে ব্যবহৃত রেফারেন্সগুলি সন্ধান করুন
- Lists তালিকাগুলি সেগুলি কখনও কল করেছে কিনা তা পরীক্ষা
.Sort()করুন
সম্ভবত সবচেয়ে খারাপটি, যদি আপনি এমন একটি IComparableবাস্তবায়ন ব্যবহার করেন যা এখনও ব্যবহৃত হচ্ছে, আপনি কোনও ত্রুটি বা সতর্কতা পাবেন না। আপনি যে জায়গাগুলি ভেবেছিলেন তা অস্পষ্ট এমন সব জায়গায় ভুল আচরণই আপনি পাবেন।
এই সমস্যাগুলি সম্মিলিত, সাথে সাথে প্রয়োজনীয় পরিবর্তনগুলি
আমি এটি সম্পর্কে চিন্তাভাবনা করতে এসেছিলাম কারণ এটি আমার পক্ষে ভুল হয়ে গেছে। আমি IComparableএখন 2 বছর ধরে আমার অ্যাপ্লিকেশনটিতে সুখে ব্যবহার করছি। এখন, প্রয়োজনীয়তা পরিবর্তন হয়েছে এবং জিনিসটি 2 টি বিভিন্ন উপায়ে বাছাই করা দরকার। এটি লক্ষ্য করা গেছে যে পূর্ববর্তী বিভাগে বর্ণিত পদক্ষেপগুলির মধ্য দিয়ে যাওয়া কোনও মজাদার নয়।
প্রশ্নটি
এই সমস্যাগুলি আমাকে IComparableনিম্নমানের IComparerবা তার চেয়ে কম বিকল্প হিসাবে ভাবতে .OrderBy()বাধ্য করে, এমন কোনও বৈধ ব্যবহারের কেস না দেখে যা বিকল্পগুলির দ্বারা আরও ভালভাবে পরিবেশন করা যায় না। লিনকিউ
ব্যবহার করা কি সর্বদা ভাল IComparer, বা এখানে সুবিধাগুলি / ব্যবহারের মামলাগুলি আমি দেখছি না?
IComparableআর ব্যবহার করবেন না, যা আমার বক্তব্যকে শক্তিশালী করছে।
SortedXXXসংগ্রহগুলি, তারা হয় সঞ্চিত উপাদানের প্রয়োজন হতে IComparableবা আছে IComparerপ্রদান করা হয়েছে। এছাড়াও মনে রাখবেন যে, কোনও তুলনাকারীর সাথে প্রাকৃতিক সাজানোর ক্রমটিকে বিপরীত করা এবং এটি সমস্ত IComparableবস্তুর সাথে কাজ করা তুচ্ছ ।
IComparableবিবেচনা করা হয় । আপনি যখন ডিফল্ট তুলনা প্রক্রিয়া ওভাররাইড করতে চান তখন ব্যবহৃত হয়। IComparer
ReverseComparer<T>: gist.github.com/jackfarrington/078e7af7bc82482aa634