C'è un built-in IEqualityComparer che mette a confronto gli oggetti solo con il loro valore di hash?

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

Domanda

C'è un built-in IEqualityComparer che confronta gli oggetti dal valore restituito dal loro valore GetHashCode? E 'facile da scrivere, ma preferisco utilizzare una classe fornita invece di uno personalizzato.

Codice attuale:

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);
    }
}
È stato utile?

Soluzione

No, una cosa del genere non esiste nel quadro, per quanto io sappia.

Sarebbe una cosa generalmente Bad - codici hash non devono essere unici, in modo che non possa essere utilizzato per simulare l'uguaglianza normale, diversi da quelli per i tipi con 2 ^ 32 possibili valori o meno, e una generazione di hash algoritmo che dà un codice unico per ogni valore.

sto lottando per pensare a qualsiasi uso razionale di questo - che è il motivo per cui è improbabile che trovare nel quadro. Forse c'è un po 'di molto situazione specializzata in cui si può trovare utile, ma non è una giustificazione sufficiente per metterlo nel quadro principale.

Fuori di interesse, quello che stai cercando di fare con esso?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top