そこにビルトインされた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