public int GetHashCode(NullableValue <TOffset>[,] obj)
        {
            int code = 23;

            for (int i = 0; i < obj.GetLength(0); i++)
            {
                for (int j = 0; j < 2; j++)
                {
                    code = code * 31 + (obj[i, j].HasValue && obj[i, j].Value != null ? _offsetEqualityComparer.GetHashCode(obj[i, j].Value) : 0);
                }
            }
            return(code);
        }
        public bool Equals(NullableValue <TOffset>[,] x, NullableValue <TOffset>[,] y)
        {
            for (int i = 0; i < x.GetLength(0); i++)
            {
                for (int j = 0; j < 2; j++)
                {
                    if (x[i, j].HasValue != y[i, j].HasValue)
                    {
                        return(false);
                    }

                    if (x[i, j].HasValue && !_offsetEqualityComparer.Equals(x[i, j].Value, x[i, j].Value))
                    {
                        return(false);
                    }
                }
            }
            return(true);
        }