C'è un built-in IEqualityComparer che mette a confronto gli oggetti solo con il loro valore di hash?
-
21-09-2019 - |
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);
}
}
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?