哈希码是从不保证是唯一的,因为这不是他们的目的 - 它们旨在帮助在平等测试中作为两个实例之间潜在平等的早期指示符。
换句话说,一个哈希码可以帮助你快速排除两个实例,肯定是而不是等于。
也许这样的事情将是最好的:
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-23 15:40:36
嗯,我想这是理论上可能与我的方法相冲突;)http://en.wikipedia.org/wiki/Uuid#Random_UUID_probability_of_duplicates – 2009-09-23 15:43:10