我看到了至少3条实施自定义比较的建议:
GetHashCode()
和Equals()
。 IEqualityComparer<TKey>
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; }
}
答案 0 :(得分:0)
我的遗漏。字典键被声明为struct。 Struct是一种值类型。一旦
struct TariffKey
更改为
public class TariffKey
即值类型成为引用类型,除非我们指定问题中描述的其他相等规则,否则代码段将停止工作。