.NET Fiddle

CSharp · Console

/Program.cs

using System;
using System.Collections.Generic;

					
public static class Program
{
	public static void Main()
	{
		 var first = new int[] { 1, 2, 3, 4, 5 };
        var second = new string[] { "a", "b", "c" };
        var zipped = first.Zip(second, (f, s) => new { f, s });
		
		var first1 = new int[] { 1, 2, 3 };
        var second1 = new string[] { "a", "b", "c", "d", "e" };
        var zipped1 = first1.Zip(second1, (f, s) => new { f, s });
		
		foreach(var e in zipped1)
			Console.WriteLine(e.f + e.s);
		
		
	}
	
	static IEnumerable<T> Zip<T1, T2, T>(this IEnumerable<T1> first,
           IEnumerable<T2> second, Func<T1, T2, T> operation)
    {
        using (var iter1 = first.GetEnumerator())
        using (var iter2 = second.GetEnumerator())
        {
            while (iter1.MoveNext())
            {
                if (iter2.MoveNext())
                {
                    yield return operation(iter1.Current, iter2.Current);
                }
                else
                {
                    yield return operation(iter1.Current, default(T2));
                }
            }
            while (iter2.MoveNext())
            {
                yield return operation(default(T1), iter2.Current);
            }
        }
    }
}
;