private ILEmitter EmitCompareAsSortedArrays(ILEmitter il, Label gotoNext, LocalBuilder x, LocalBuilder y)
        {
            var hasCustomComparer = _configuration.HasCustomComparer(_elementType);

            il.EmitArraySorting(hasCustomComparer, _elementType, x, y);

            var arrayType = _elementType.MakeArrayType();

            return(_arrayComparisonEmitter.EmitCompareArrays(il, arrayType, _variable.OwnerType, x, y, gotoNext));
        }
        public ILEmitter Emit(ILEmitter il, Label gotoNext)
        {
            var arrayType = _variable.VariableType;

            var(arrayX, arrayY) = _arrayComparisonEmitter.EmitLoad(_variable, il, gotoNext);

            if (_configuration.Get(_variable.OwnerType).IgnoreCollectionOrder)
            {
                var elementType       = arrayType.GetElementType();
                var hasCustomComparer = _configuration.HasCustomComparer(elementType);
                il.EmitArraySorting(hasCustomComparer, elementType, arrayX, arrayY);
            }

            return(_arrayComparisonEmitter.EmitCompareArrays(il, arrayType, _variable.OwnerType, arrayX, arrayY, gotoNext));
        }