【发布时间】:2012-11-28 12:55:16
【问题描述】:
我正在想办法在从 Vector2[] 调用时覆盖 GetHashCode()。此代码为我知道相等的对象生成非唯一散列:我将以下类传递给相同的矩形,并生成不同的散列码。
public Shape(Rectangle r)
{
edges = new Vector2[4];
edges[0] = new Vector2(0, 0);
edges[1] = new Vector2(r.Width, 0);
edges[2] = new Vector2(r.Width, r.Height);
edges[3] = new Vector2(0, r.Height);
Console.Write(edges.GetHashCode() + "\n");
Position = new Vector2(r.X, r.Y);
}
Vector2 数组只是一堆整数。如何为整数列表创建唯一哈希?
【问题讨论】:
-
这应该可以。你能发布一个完整的例子,展示两个相等的向量产生不同的哈希码吗?
-
数组不提供基于数组内容的哈希码。所以这个代码不起作用。您必须自己动手,或者如果您使用 .NET 4,请使用 IStructuralEquatable interface。
-
@SimonWhitehead:真的吗?那么Vector2.GetHashCode 返回什么?
-
@DavidSchwartz Vector2 实例的哈希值。但是
edges.GetHashCode不会根据数组中的每个 Vector2 实例生成散列。请注意,edges 是 Vector2 的数组。 -
@SimonWhitehead:哦!不错,不错。