هل هناك iequalitycomparer مدمج يقارن الكائنات فقط باستخدام قيمة التجزئة؟
-
21-09-2019 - |
سؤال
هل هناك IequalityComparer مدمج يقارن الكائنات بالقيمة التي يتم إرجاعها بواسطة قيمة GethashCode الخاصة بهم؟ من السهل الكتابة ، لكنني أفضل استخدام فئة متوفرة بدلاً من فئة مخصصة.
الكود الحالي:
private class HashComparer : IEqualityComparer<TKey>
{
private readonly Func<TKey, int> _Hasher;
public HashComparer (Func<TKey, int> hasher)
{
_Hasher = hasher;
}
public bool Equals (TKey x, TKey y)
{
// null supposed to throw, therefore no check
return _Hasher (x) == _Hasher (y);
}
public int GetHashCode (TKey obj)
{
return _Hasher (obj);
}
}
المحلول
لا ، مثل هذا الشيء غير موجود في الإطار بقدر ما أعرف.
سيكون الأمر سيئًا بشكل عام - لا يجب أن تكون رموز التجزئة فريدة من نوعها ، لذلك لا يمكن استخدامها لتقليد المساواة الطبيعية ، بخلاف الأنواع التي تحتوي على 2^32 قيمًا محتملة أو أقل ، وخوارزمية توليد التجزئة التي تعطي رمز فريد لكل قيمة.
أنا أكافح للتفكير في أي استخدام معقول لهذا - وهذا هو السبب في أنك من غير المرجح أن تجدها في الإطار. ربما هناك بعض جداً الموقف المتخصص حيث تجده مفيدًا ، لكن هذا ليس مبررًا كافيًا لوضعه في الإطار الرئيسي.
بدافع الاهتمام ، ما الذي تحاول فعله به؟
لا تنتمي إلى StackOverflow