public override int GetHashCode()
{
var ret = 0;
for (var i = 0; i < Values.Count(); i++)
{
var vHash = Values.ElementAt(i).GetHashCode();
var bytes = BitConverter.GetBytes(vHash).ToList();
var rotateBy = i % bytes.Count;
var firstI = bytes.Take(rotateBy);
var theRest = bytes.Skip(rotateBy);
var rotatedBytes = new List<byte>(4);
rotatedBytes.AddRange(firstI);
rotatedBytes.AddRange(theRest);
var rotated = BitConverter.ToInt32(rotatedBytes.ToArray(), 0);
ret ^= rotated;
}
return ret;
}