هل هناك iequalitycomparer مدمج يقارن الكائنات فقط باستخدام قيمة التجزئة؟

StackOverflow https://stackoverflow.com/questions/1788889

سؤال

هل هناك 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 قيمًا محتملة أو أقل ، وخوارزمية توليد التجزئة التي تعطي رمز فريد لكل قيمة.

أنا أكافح للتفكير في أي استخدام معقول لهذا - وهذا هو السبب في أنك من غير المرجح أن تجدها في الإطار. ربما هناك بعض جداً الموقف المتخصص حيث تجده مفيدًا ، لكن هذا ليس مبررًا كافيًا لوضعه في الإطار الرئيسي.

بدافع الاهتمام ، ما الذي تحاول فعله به؟

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top