Apart from (IEnumerable Returns GetEnumerator() ,for "foreach" IEnumerble is essential)
almost the following two approaches allow us to iterate over the collection.What is
the advantage of one over another ? (I am not asking the difference between IEnumerable and IEnumerator).
static void Main()
{
    IEnumerator<int> em = MyEnumerator<int>(new int[] { 1, 2, 3, 4 });
    IEnumerator<int> e = Collection<int>
                        (new int[] { 1, 2, 3, 4 }).GetEnumerator();
    while (em.MoveNext())
    {
        Console.WriteLine(em.Current);
    }
    while (e.MoveNext())
    {
        Console.WriteLine(e.Current);
    }
    Console.ReadKey(true);
}
approach 1
 public static IEnumerator<T> MyEnumerator<T>(T[] vals )
 {
     T[] some = vals;
     foreach (var v in some)
     {
       yield return v;
     }
}
approach 2
public static IEnumerable<T> Collection<T>(T[] vals)
     {
         T[] some = vals;
         foreach (var v in some)
         {
             yield return v;
         }
     }