public SeatsReserved ReserveSeats(ReserveSeats reserveSeats) { var rows = new List <Row>(); Row rowWithAvailableSeats = null; foreach (var row in _rows) { if (!(rowWithAvailableSeats is null) || !row.HasAvailableSeats(reserveSeats.SeatsToBeReserved)) { rows.Add(Row.CreateFromRow(row)); continue; } rowWithAvailableSeats = row; } if (rowWithAvailableSeats is null) { throw new SeatsNotAvailable(); } rows.Add(rowWithAvailableSeats.ReserveSeats(reserveSeats.SeatsToBeReserved)); _rows = rows.OrderBy(x => x.RowNumber).ToList(); return(new SeatsReserved(reserveSeats.SeatsToBeReserved)); }