Hashcodes - 乘法还是xor?

时间:2014-06-26 15:08:35

标签: c# gethashcode

我看到了这个哈希函数 - 它触发了一些警报:

public override int GetHashCode()
{
    var result = 0;
    unchecked {
        result = anIntId.GetHashCode();
        result *= 397 * (aString != null ? aString.GetHashCode() : 0);
    }
    return result;
}

我的自动化hash-code-smell-fixer-subroutine想要将其重写为:

public override int GetHashCode()
{
    var result = 0;
    unchecked {
        result = anIntId.GetHashCode() * 397;
        result = (result * 397) ^ (aString != null ? aString.GetHashCode() : 0);
    }
    return result;
}

我无法记住我在哪里学习这种模式,但似乎其中一些实际上没有意义:

  • 第一次乘以397看起来像是浪费时间
  • [编辑] {在脑中减去咖啡背景,解释为^取幂}

这看起来是否正确,还是我犯了一些错误?

0 个答案:

没有答案