复合键再次成为类的字典的关键比较

时间:2016-12-01 22:44:02

标签: c# .net dictionary

我看到了至少3条实施自定义比较的建议:

  • 在课程中覆盖GetHashCode()Equals()
  • 实现IEqualityComparer<TKey>
  • 的构造函数
  • Linq扩展方法Contains,允许您传入IEqualityComparer<T>

我的问题 - 对于这样一个复合键的标准比较是否需要做任何事情,或者它取决于一个类?

E.g。以下代码段正常运行:

Dictionary<TariffKey, RefCusNomenclatureGroup> tariff = new Dictionary<TariffKey, RefCusNomenclatureGroup>();

// dictionary populated 
var trfKey = new TariffKey { Code = "xyz", SortKey = "123" };

if ( tariff.ContainsKey( trfKey ) ) // compared as expected - match - when both string fields are equal 
{
       //do something here
}

struct  TariffKey
{
    public string Code { get; set; }
    public string SortKey { get; set; }
}

1 个答案:

答案 0 :(得分:0)

我的遗漏。字典键被声明为struct。 Struct是一种值类型。一旦

struct TariffKey

更改为

public class TariffKey

即值类型成为引用类型,除非我们指定问题中描述的其他相等规则,否则代码段将停止工作。