Ich habe ein Wörterbuch:ContainsKey im Wörterbuch von Hashset <myClass>
Dictionary<HashSet<myClass>, List<MyObj>> myDict = ...
Und ich habe:
HashSet<myClass> myHashSet = ...
ich überprüfen möchten, ob das Wörterbuch (myDict) enthält myHashSet.
Ich habe versucht, zwei Methoden außer Kraft zu setzen:
1) gleich
2)
GetHashCodepublic class myClass
{
public string id;
public int number;
public override bool Equals(object obj)
{
myClass other = obj as myClass;
bool ret = false;
if (other != null)
{
ret = (this.number == other.number) && (this.id == other.id);
}
return ret;
}
public override int GetHashCode()
{
return this.number^this.id.GetHashCode();
}
};
Leider ein Schlüssel, der im Wörterbuch gefunden wird, gibt false für den Code: myDict.ContainsKey(myHashSet)
Jede Hilfe wird geschätzt!
Es funktioniert nicht, wenn die Hashset einer Klasse ist: Dictionary, List > myDict = new Dictionary , List >(); HashSet myHashSet1 = neuer HashSet (); myHashSet1.Add (neue myClass ("123", 5)); myDict.Add (myHashSet1, null); HashSet myHashSet2 = neuer HashSet (); myHashSet2.Add (neue myClass ("123", 5)); if (myDict.ContainsKey (myHashSet2)) { int i = 3; // Es wird nicht diese Zeile } –
Ihr Code wird immer false zurückgeben. Ich habe meinen Code aktualisiert. – dfdsfdsfsdf
Wenn Sie myClass überschreiben, gilt dies nur für den Vergleich von zwei Instanzen von myClass. Wenn Sie HashSet vergleichen möchten, müssen Sie es erweitern und die Logik bereitstellen. Andernfalls wird es als Referenz verglichen. – dfdsfdsfsdf