현재 containskey 메서드를 사용하여 사전에 사용자 지정 형식의 특정 키가 있는지 확인하려고합니다. 이렇게하려면 내가 가진 gethashcode 함수를 재정의해야합니다. 그러나 containskey 메서드는 여전히 작동하지 않습니다. 내가 원하는 내가 사전 (트리거 상태)가 :이 내가 잘 수 없어요 것이어야하지만 난 정확히 지난 5 시간 전이 시도하고 무엇을 알아 냈 havent 한 : 추가 설명을 위해containskey 및 gethashcode 문제
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;
}
}
}
을 모든 하위 클래스가 equatable인지 확인한 경우에만 containsKey 메서드를 사용할 수 있지만 가정용 키를 확인하는 것은 아닙니다.
편집 :
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;
}
코드에서 사용자 정의 유형이 키로 사용되는 것을 볼 수 없습니다. int를 키로 사용하고 있습니다. 문제가있는 코드를 보여줘야합니다. – Stewart
나는 이것을 확인하고있는 Dictionary를 가지고있다. 상태가 또 다른 사용자 정의 클래스입니다.하지만이 질문에 중요하지 않습니다. –