Как работает логика в этом коде?
Помогите пожалуйста разобраться с со следующим кодом:
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, следовательно возникает ошибка, что индекс находится вне зоны диапазона