【问题标题】:How to override the default comparer for dictionaries? [duplicate]如何覆盖字典的默认比较器? [复制]
【发布时间】:2019-09-03 17:09:53
【问题描述】:

如果我有字典

Dictionary<SomeClass, int> MyDict { get; set; } = ...

如何覆盖在评估键时调用的比较方法?

如 - 我想控制在我写作时选择哪个对象

MyDict[SomeClassInstance]

【问题讨论】:

标签: c# dictionary


【解决方案1】:

您需要实现IEqualityComparer&lt;TKey&gt; 并将其实例传递给字典的constructor

public class MyComparer : IEqualityComparer<object>
{
    public bool Equals(object o1, object o2)
    {
        // implement your way of equality 
    }
    public int GetHashCode(object o)
    {
        // implement a hash method that returns equal hashes for equal
        // objects and well distributed hashes for not-equal objects
    }
}

Dictionary<object, int> myDict = new Dictionary<object, int>(new MyComparer());

【讨论】:

    【解决方案2】:

    您可能希望use the constructor 允许您传递IEqualityComparer&lt;TKey&gt; 的实例,然后将其用于您的键比较。我不相信你可以在实例化后改变它。

    【讨论】:

    • 你的意思是派生自IEqualityComparer&lt;TKey&gt;?保留一个实例对我来说听起来很奇怪
    • 是的,您可以将IEqualityComparer&lt;TKey&gt; 实现为某个类,然后将该类的实例传递给构造函数。
    • 是的,别人也是这么说的,谢谢,我会用的
    猜你喜欢
    • 2020-02-24
    • 2012-03-25
    • 2020-08-09
    • 2011-08-03
    • 1970-01-01
    • 2021-09-13
    • 1970-01-01
    • 1970-01-01
    • 2018-05-08
    相关资源
    最近更新 更多