public int Compare(T x, T y)
        {
            int?nullable = ChainableComparer <T> .handleNulls(x, y);

            if (nullable.HasValue)
            {
                return(nullable.Value);
            }
            int num = this.DoCompare(x, y);

            if (this.needsToEvaluateNext(num))
            {
                num = this._nextComparer.Compare(x, y);
            }
            if (this._direction == Direction.Descending)
            {
                ChainableComparer <T> .invert(ref num);
            }
            return(num);
        }