public virtual uint Hash() { int nums = NumberOfComponents; double[] floats = new double[nums]; uint h = 0; uint i; GetComponents(ref floats); for (i = 0; i < floats.Length; i++) { h = (h << 5) + h + (uint)floats[i]; } return h; }