public override int GetHashCode()
{
unchecked
{
return (str1 ?? String.Empty).GetHashCode() +
(str2 ?? String.Empty).GetHashCode();
}
}
Использование оператора «+» может быть лучше, чем использование «^», поскольку, хотя вы явно хотите, чтобы («AA», «BB») и («BB», «AA») явно были одинаковыми, вы можете не хочу, чтобы ('AA', 'AA') и ('BB', 'BB') были одинаковыми (или все равные пары в этом отношении).
Правило «как можно быстрее» не полностью соблюдается в этом решении, потому что в случае нулей это выполняет GetHashCode () для пустой строки, а не сразу возвращает известную константу, но даже без явного измерения Я готов рискнуть предположить, что разница не будет достаточно большой, чтобы беспокоиться, если вы не ожидаете много нулей.