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
This would do it:
public static IEnumerable> CombineWith(this IEnumerable first, IEnumerable 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.