我目前正在尝试使用 containskey 方法来检查我拥有的字典是否包含某个自定义类型的键。为此,我应该覆盖我拥有的 gethashcode 函数,但是 containskey 方法仍然不起作用。一定有什么我做的不对,但我还没有弄清楚在过去的 5 个小时里我到底在尝试什么:
public class Parameter : IEquatable<Parameter>
{
public string Field { get; set; }
public string Content { get; set; }
public bool Equals(Parameter other)
{
if (other == null)
{
return false;
}
return Field.Equals(other.Field) && Content.Equals(other.Content);
}
public override int GetHashCode()
{
unchecked
{
int hash = 17;
hash = hash * 23 + Field.GetHashCode();
hash = hash * 23 + Content.GetHashCode();
return hash;
}
}
}
public class Trigger : IEquatable<Trigger>
{
public Dictionary<int, Parameter> Parameters { get; private set; }
private string Event { get; set; }
public bool Equals(Trigger item)
{
if (item == null)
{
return false;
}
return Event.Equals(item.Event) && Parameters.Equals(item.Parameters);
}
public override int GetHashCode()
{
unchecked
{
var hash = 17;
hash = hash * 23 + Parameters.GetHashCode();
hash = hash * 23 + Event.GetHashCode();
return hash;
}
}
}
为了更加清楚:我有一个字典(触发器,状态),我想检查它的键,所以我假设如果我确保我的所有子类都是平等的,我可以只使用 containskey 方法,但显然它没有。
编辑:我现在所做的是实现 Jon Skeet 的 Dictionary 类并使用它来检查:
public override bool Equals(object o)
{
var item = o as Trigger;
if (item == null)
{
return false;
}
return Event.Equals(item.Event) && Dictionaries.Equals(Parameters, item.Parameters);
}
public override int GetHashCode()
{
var hash = 17;
hash = hash * 23 + Dictionaries.GetHashCode(Parameters);
hash = hash * 23 + Event.GetHashCode();
return hash;
}