Well, you current implementation is quite OK, but you can be better off if intType
and enumType
are of small range.
Suppose, intType
(allmost always) is in the [0..1000000]
and enumType
is in the [0..10]
range then
public override int GetHashCode() {
return unchecked(intType * 10 + (int)enumType);
}
will be a better choice: many hash collisions that a present in your current code are not such in the code above. For instance
intType | enumType | old hash | suggested
-----------------------------------------
0 5 15 5
3 0 15 30
Edit: In your case (please, see comments)
it should not be more than 100
assuming that you don't have negative values, you can try
public override int GetHashCode() {
// * 128 == << 7 may be faster than * 100 at some systems
return unchecked(intType * 128 + (int)enumType);
}
and expect to have no collisions at all