Sto provando a pensare a un modo per ignorare GetHashCode() quando chiamato da Vector2 []. Questo codice produce hash non univoci per oggetti che so essere uguali: passo la classe seguente allo stesso rettangolo e vengono generati diversi codici hash.Come hash un int [] in C#
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);
}
Un array Vector2 è solo un mucchio di ints. Come posso creare un hash univoco per un elenco di ints?
Questo potrebbe dovrebbe funzionare. Puoi pubblicare un esempio completo che mostra due vettori uguali che producono diversi codici hash? –
Gli array non forniscono un codice hash basato sul contenuto dell'array .. quindi questo codice non funzionerà. È necessario eseguire il rollover, oppure se si utilizza .NET 4, utilizzare [Interfaccia IStructuralEquatable] (http://msdn.microsoft.com/en-us/library/system.collections.istructuralequatable.aspx). –
@SimonWhitehead: Davvero? Quindi cosa restituisce [Vector2.GetHashCode] (http://msdn.microsoft.com/en-us/library/microsoft.xna.framework.vector2.gethashcode%28v=xnagamestudio.10%29.aspx)? –