static void Main(string[] args) { // An array is already an IEnumerable => foreach works var array = new int[] { 1, 2, 3 }; foreach (var a in array) { Console.WriteLine($"A is {a}"); } // The foreach loop will be compile down to this version (low-level) var enumerator = array.GetEnumerator(); while (enumerator.MoveNext()) // Return true if there is another item { Console.WriteLine($"Enumerator A is {enumerator.Current}"); } // ------------------------ CUSTOM ENUMERABLE -------------------------------- GradeBook gradebook = new GradeBook(); gradebook.AddStudent(new Student() { FirstName = "Lejing", LastName = "Huang", UHID = 1800000, Grade = 85 }); gradebook.AddStudent(new Student() { FirstName = "Tony", LastName = "Stark", UHID = 1800001, Grade = 60.5m }); gradebook.AddStudent(new Student() { FirstName = "Winnie", LastName = "Li", UHID = 1800002, Grade = 90 }); gradebook.AddStudent(new Student() { FirstName = "Simon", LastName = "Shaw", UHID = 1800003, Grade = 10 }); foreach (Student student in gradebook) { Console.WriteLine($"Name: {student.FirstName} {student.LastName}, UHID: {student.UHID}, Grade: {student.Grade}"); } }