Эффективный способ в LINQ соединения на основе индекса

Я написал код, который работает, но я не могу найти лучший способ объединить списки вместе, если они имеют один и тот же индекс.

    class Apple {};
    class Carrot {};

    var apples = new list<Apple>();
    var carrot = new list<Carrot>();

    var combine = from a in apples
                  from c in carrots
                  where apples.IndexOf(a) == carrots.IndexOf(c)
                  select new {a, c};

(Когда я говорю "Комбинировать", я не имею в виду присоединение к концу списка. {{a, b}, {a, b},.... {}}: Может быть, у меня неправильная терминология пытаясь исследовать.)

Ответ 1

Вы можете использовать Enumerable.Zip:

var combine = apples.Zip(carrots, (a, c) => new { Apple = a, Carrot = c});

Ответ 2

apples.Select((a,i)=> new { Apple = a, Carrot = carrots[i] });

Это тоже должно работать.