public override int GetHashCode()
{
unchecked
{
return (str1 ?? String.Empty).GetHashCode() +
(str2 ?? String.Empty).GetHashCode();
}
}
Die Verwendung des Operators '+' könnte besser sein als die Verwendung von '^', denn obwohl Sie ausdrücklich wollen, dass ('AA', 'BB') und ('BB', 'AA') gleich sind, wollen Sie vielleicht nicht, dass ('AA', 'AA') und ('BB', 'BB') gleich sind (oder alle gleichen Paare, was das betrifft).
Die Regel "so schnell wie möglich" wird bei dieser Lösung nicht ganz eingehalten, da im Falle von Nullen ein "GetHashCode()" auf der leeren Zeichenkette ausgeführt wird, anstatt sofort eine bekannte Konstante zurückzugeben, aber auch ohne explizite Messung bin ich bereit, die Vermutung zu wagen, dass der Unterschied nicht groß genug wäre, um sich Sorgen zu machen, es sei denn, Sie erwarten viele Nullen.