এটি একটি ব্যবহার করে IEqualityComparer<T>(EqualityComparer<T>.Default আপনি যদি নির্মাণের ক্ষেত্রে আলাদা আলাদা উল্লেখ না করেন)।
আপনি যখন সেটে কোনও উপাদান যুক্ত করবেন, এটি ব্যবহার করে হ্যাশ কোডটি খুঁজে পাবেন IEqualityComparer<T>.GetHashCode এবং হ্যাশ কোড এবং উপাদান উভয়ই সংরক্ষণ করবে (অবশ্যই উপাদানটি ইতিমধ্যে সেটে রয়েছে কিনা তা যাচাই করার পরে)।
কোনও উপাদান সন্ধান করতে, এটি প্রথমে IEqualityComparer<T>.GetHashCodeহ্যাশ কোডটি সন্ধান করতে ব্যবহার করবে , তারপরে একই হ্যাশ কোডযুক্ত সমস্ত উপাদানগুলির জন্য এটি ব্যবহার করবেIEqualityComparer<T>.Equals প্রকৃত সাম্যের জন্য তুলনা ।
এর অর্থ আপনার কাছে দুটি বিকল্প রয়েছে:
IEqualityComparer<T>কনস্ট্রাক্টর একটি কাস্টম পাস । আপনি নিজেরটিকে সংশোধন করতে না পারলে Tবা আপনি যদি কোনও ডিফল্ট সমতা সম্পর্ক চান তবে এটি সর্বোত্তম বিকল্প eg এটি প্রায়শই নিজে প্রকারে প্রয়োগ করা Fooহয় না (যেমন প্রয়োগ করে নাIEqualityComparer<Foo> ) তবে একটি পৃথক প্রকারে যা কেবল তুলনার জন্য ব্যবহৃত হয়।
- ওভাররাইড করে
GetHashCodeএবং এ ধরণের ক্ষেত্রেই সমতা প্রয়োগ করুন Equals(object)। আদর্শভাবে, IEquatable<T>প্রকারটিও প্রয়োগ করুন , বিশেষত যদি এটি কোনও মান ধরণের হয়। এই পদ্ধতিগুলিকে ডিফল্ট সমতা তুলক দ্বারা ডাকা হবে।
নোট কিভাবে এই কেউই একটি পদ হয় আদেশ তুলনা - যা ইন্দ্রিয় তোলে, যেহেতু অবশ্যই পরিস্থিতিতে যেখানে আপনি সহজেই সমতা কিন্তু মোট ক্রম উল্লেখ করতে পারেন। এটি Dictionary<TKey, TValue>মূলত একই রকম ।
আপনি যদি এমন একটি সেট চান যা কেবলমাত্র সমতা তুলনার পরিবর্তে অর্ডার ব্যবহার করে, আপনি। SortedSet<T>নেট 4 ব্যবহার করতে পারেন - যা আপনাকে একটি IComparer<T>পরিবর্তে একটি নির্দিষ্ট করার অনুমতি দেয় IEqualityComparer<T>। এটি ব্যবহার করবে IComparer<T>.Compare- যা আপনি ব্যবহার করছেন IComparable<T>.CompareToবা IComparable.CompareToতা প্রতিনিধিত্ব করবে Comparer<T>.Default।
IEqualityComparer<T>কনস্ট্রাক্টরের একটি বাস্তবায়ন যুক্ত করুন বা শ্রেণিতে এটি প্রয়োগ করুনa। এমএসডিএন.মাইক্রোসফট.এইন.উস