Для того, чтобы использовать foreach надо реализовать интерфейсы 
IEnumerable
public interface IEnumerable 
{     
  IEnumerator GetEnumerator(); 
}
 и IEnumerator
public interface IEnumerator 
{     
  bool MoveNext(); // перемещение на одну позицию вперед в контейнере элементов     
  object Current {get;}  // текущий элемент в контейнере     
  void Reset(); // перемещение в начало контейнера 
} 


Пример с классом AStudent
class AStudent
    {
        public string fN;
        public string LN;
       public AStudent(string fN, string LN)
        {
            this.fN = fN;
            this.LN = LN;
        }
    }
    class AGroup:IEnumerable,IEnumerator
    {
        int pos = -1;
        AStudent[] _as;
        public AGroup(AStudent[] sas)
        {
            _as = sas;
        }
        // Реализуем интерейс IEnumerable
        public IEnumerator GetEnumerator()
        {
            return this;
        }


        // Реализуем интерфейс IEnumerator
        public bool MoveNext()
        {
            if (pos == _as.Length - 1)
            {
                Reset();
                return false;
            }

            pos++;
            return true;
        }

        public void Reset()
        {
            pos = -1;
        }

        public object Current
        {
            get
            {
                return _as[pos];
            }
        }
    }


    class Program
    {
        static void Main(string[] args)
        {
            AStudent[] sts=new AStudent[]
            {
                new AStudent("John","Smith"),
                new AStudent("Mary","Stuart"),
                new AStudent("Ivan","Mc'Nil")
            };
            AGroup ag = new AGroup(sts);
            
            IEnumerator ie=ag.GetEnumerator();
            while (ie.MoveNext()) 
            {
                Console.WriteLine(((AStudent)ie.Current).fN);
            }


            foreach (AStudent s in ag)
            {
                Console.WriteLine(s.fN + " " + s.LN);
            }
         }
}
Хорошая новость состоит в том, 
что массивы уже реализуют интерфейс IEnumerator, 
поэтому можно просто обратиться к перечислителю массива
    class AGroup2 : IEnumerable
    { 
        int pos = -1;
        AStudent[] _as;
        public AGroup2(AStudent[] sas)
        {
            _as = sas;
        }
        public IEnumerator GetEnumerator()
        {
            return _as.GetEnumerator();
        }
     }