在IEqualityComparer中包装委托

几个Linq.Enumerable函数需要一个IEqualityComparer<T>。是否有一个方便的包装类适应delegate(T,T)=>bool实现IEqualityComparer<T>?编写一个很容易(如果你忽略了定义正确的哈希码的问题),但我想知道是否有开箱即用的解决方案。

具体来说,我想对Dictionarys 进行集合操作,仅使用Keys来定义成员资格(同时根据不同的规则保留值)。


慕雪6442864
浏览 394回答 3
3回答

婷婷同学_

以下是我对[IMNSHO]关键修复默认的散列策略: -class FuncEqualityComparer<T> : IEqualityComparer<T>{    readonly Func<T, T, bool> _comparer;    readonly Func<T, int> _hash;    public FuncEqualityComparer( Func<T, T, bool> comparer )        : this( comparer, t => 0 ) // NB Cannot assume anything about how e.g., t.GetHashCode() interacts with the comparer's behavior    {    }    public FuncEqualityComparer( Func<T, T, bool> comparer, Func<T, int> hash )    {        _comparer = comparer;        _hash = hash;    }    public bool Equals( T x, T y )    {        return _comparer( x, y );    }    public int GetHashCode( T obj )    {        return _hash( obj );    }}
打开App,查看更多内容
随时随地看视频慕课网APP