Как работает логика в этом коде?

Помогите пожалуйста разобраться с со следующим кодом:

public async Task<string> ProcessAuction(ICollection<RtbModel> rtb_partners, BidRequestModel bidRequest)
        {
            string rval = null;

            var bids = await GetBids(rtb_partners, bidRequest);

            IEnumerable<Auction> auction = Array.Empty<Auction>();

            Auction[] topBids= Array.Empty<Auction>();

            for (int i = 0; i < bids.Length; i++)
            {
                var bid = bids[i];
                if (bid.bidResponse == null || bid.bidResponse.Currency != "RUB")
                    continue;

                auction =
                    auction.Union(bid.bidResponse.SeatBids.Where(s => s.WonAsGroup == 0).SelectMany(s => s.Bids.Select(b => new Auction(b, s, bidRequest.Impressions[i].Bidfloor, bid))));

                
            }

            topBids = auction.Where(b => b.bidModel.ImpressionsID == "1" && (!b.BidFloor.HasValue || b.bidModel.Price >= b.BidFloor)).OrderByDescending(b => b.bidModel.Price).Take(2).ToArray();
            

            return rval;
        }

Когда код доходит до строки
topBids = auction.Where(b => b.bidModel.ImpressionsID == "1" && (!b.BidFloor.HasValue || b.bidModel.Price >= b.BidFloor)).OrderByDescending(b => b.bidModel.Price).Take(2).ToArray();

то почему-то идет переключение на строку выше, а именно сюда

auction = auction.Union(bid.bidResponse.SeatBids.Where(s => s.WonAsGroup == 0).SelectMany(s => s.Bids.Select(b => new Auction(b, s, bidRequest.Impressions[i].Bidfloor, bid))));

Почему происходит переключение?

P.S. Из-за переключения идет ошибка в этом месте bidRequest.Impressions[i].Bidfloor так как i в цикле увеличивается на 1, следовательно возникает ошибка, что индекс находится вне зоны диапазона


Ответы (0 шт):