Ik ben aan het proberen om de containskey methode te gebruiken van een dictionary:
Dictionary<Trigger, State>
Zoals je ziet is mijn trigger een custom class die ik gemaakt heb. Om custom classes te kunnen vergelijken moet ik blijkbaar mijn gethashcode overriden, wat ik ook gedaan heb, echter maak ik volgens mij ergens een denkfout in mijn implementatie waardoor het niet werkt. Ik zit hier al een tijdje mee te spelen maar ik krijg het dus niet voor elkaar om het werkend te krijgen.
Wat mijn denkwijze was is dat ik van alle velden die in mijn klasse staan zorg dat er een goede gethashcode en equals methode wordt gemaakt, zodat deze zich tegenover elkaar kunnen checken en dat ik dit zelfde doe op een hoger niveau, gebruikmakend van de gethashcode van deze lagere velden, echter werkt dit niet zoals ik had bedacht.
Dictionary<Trigger, State>
Zoals je ziet is mijn trigger een custom class die ik gemaakt heb. Om custom classes te kunnen vergelijken moet ik blijkbaar mijn gethashcode overriden, wat ik ook gedaan heb, echter maak ik volgens mij ergens een denkfout in mijn implementatie waardoor het niet werkt. Ik zit hier al een tijdje mee te spelen maar ik krijg het dus niet voor elkaar om het werkend te krijgen.
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
| 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; } } } |
Wat mijn denkwijze was is dat ik van alle velden die in mijn klasse staan zorg dat er een goede gethashcode en equals methode wordt gemaakt, zodat deze zich tegenover elkaar kunnen checken en dat ik dit zelfde doe op een hoger niveau, gebruikmakend van de gethashcode van deze lagere velden, echter werkt dit niet zoals ik had bedacht.