3

我试图找到一种可靠的方法来唯一地识别和跟踪 ASP.NET 网站中的不同 HttpRequest。

有人知道 HttpRequest.GetHashCode() 的实现吗?具体来说,碰撞发生的频率如何?

我了解 HashCodes 不保证是唯一的。我想了解的是统计上我可以期望 HashCode 重复自身的频率。

我想到的系统会优雅地处理 HashCode 冲突,但我想确保它们至少与千分之一左右一样唯一。

4

1 回答 1

5

哈希码永远不能保证是唯一的,因为这不是它们的目的——它们旨在帮助相等性测试,作为两个实例之间潜在相等性的早期指标。

换句话说,哈希码可以帮助您快速排除两个绝对相等的实例。

也许这样的事情是最好的:

class TrackableHttpRequest : IEquatable<TrackableHttpRequest>
{
    readonly Guid id = Guid.NewGuid();

    public Guid Id { get { return this.id; } }
    public HttpRequest Request { get; set; }

    public override Int32 GetHashCode()
    {
        return this.Id.GetHashCode();
    }

    public override Boolean Equals(Object obj)
    {
        return this.Equals(obj as TrackableHttpRequest);
    }

    public bool Equals(TrackableHttpRequest other)
    {
        if (other == null)
            return false;

        return this.Id == other.Id;
    }
}
于 2009-09-23T15:11:11.533 回答