Search code examples
c#listobject

How do I create a single list of object pairs from two lists in C#?


I have two lists of objects. List A and List B. I need to create List C which combines List A and List B into pairs. For example:

List A
object a1
object a2
object a3

List B
object b1
object b2
object b3

List C (creates pairs)
object c1 (object a1, object b1)
object c2 (object a2, object b2)
object c3 (object a3, object b3)

Solution

  • This would do it:

    public static IEnumerable<Tuple<T, U>> CombineWith<T, U>(this IEnumerable<T> first, IEnumerable<U> second)
    {
        using (var firstEnumerator = first.GetEnumerator())
        using (var secondEnumerator = second.GetEnumerator())
        {
            bool hasFirst = true;
            bool hasSecond = true;
    
            while (
                // Only call MoveNext if it didn't fail last time.
                (hasFirst && (hasFirst = firstEnumerator.MoveNext()))
                | // WARNING: Do NOT change to ||.
                (hasSecond && (hasSecond = secondEnumerator.MoveNext()))
                )
            {
                yield return Tuple.Create(
                        hasFirst ? firstEnumerator.Current : default(T),
                        hasSecond ? secondEnumerator.Current : default(U)
                    );
            }
        }
    }
    

    Edit: I vastly prefer Paul's answer.