哈希碼是從不保證是唯一的,因爲這不是他們的目的 - 它們旨在幫助在平等測試中作爲兩個實例之間潛在平等的早期指示符。
換句話說,一個哈希碼可以幫助你快速排除兩個實例,肯定是而不是等於。
也許這樣的事情將是最好的:
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