Существует ли встроенный 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