(1 條消息).Net 為什麼不為 Dictionary 提供 IEqualityComparer 的默認實現?
如題。本來問題標題里還有IComparer的,知乎告訴我問題超長。
剛剛自己寫了個DictionaryEqualityComparer&,感覺好麻煩~尤其IEqualityComparer還要重載GetHashCode。如果提供的話,豈不省很多事?還有,KeyValuePair& 也一樣,沒提供這倆介面的默認實現。為什麼?
public class DictionaryComparer&
: EqualityComparer& &>
{
public IEqualityComparer&KeyComparer { get; set; }
public IEqualityComparer&ValueComparer { get; set; } public DictionaryComparer(IEqualityComparer&
keyComparer, IEqualityComparer& valueComparer)
{
KeyComparer = keyComparer;
ValueComparer = valueComparer ?? EqualityComparer&.Default;
}public override bool Equals(IDictionary&
expected, IDictionary& actual)
{
if (KeyComparer != null)
{
actual = new Dictionary&(actual, KeyComparer);
}
foreach (TKey key in expected.Keys)
{
if (!actual.ContainsKey(key))
{
return false;
}
if (!ValueComparer.Equals(expected[key], actual[key]))
{
return false;
}
}
return true;
}public override int GetHashCode(IDictionary&
obj)
{
return obj.Sum(c =&> c.Key.GetHashCode() * c.Key.GetHashCode() * c.Value.GetHashCode());
}
}
沒看懂你在說什麼。
1、IEqualityComparer&
2、Dictionary&<&>對象可以直接獲取當前的IEqualityComparer&
Dictionary(TKey, TValue).Comparer 屬性 (System.Collections.Generic)
3、如果你的問題是,Dictionary&<&>對象為什麼不默認實現IEqualityComparer&
猜你是想比較兩個Dictionary是不是等價?那麼應該實現 IEquatable&
『』『
推薦閱讀:
※如何評價基於 C++ 17 的框架 MCF?
※如何評價 Christopher Kohlhoff 實驗性的 C++ Network 標準庫 ?
※為什麼bs虛函數表的地址(int*)(&bs)與虛函數地址(int*)*(int*)(&bs) 不是同一個?
※我是初學c++者,我想達到熟練使用c++的程度,我就想知道達到什麼地步才能算是熟練使用呢?