এটি একটি ব্যবহার করে 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
। এমএসডিএন.মাইক্রোসফট.এইন.উস