static void Main(string[] args) { Console.WriteLine("====Non Generic===="); ListIterator employeeList = new ListIterator(); employeeList.Add("Jane", Employee.TypeEnum.Manager); employeeList.Add("Tom", Employee.TypeEnum.Manager); employeeList.Add("Brian", Employee.TypeEnum.Associate); employeeList.Add("Ashley", Employee.TypeEnum.Associate); employeeList.Add("Meriam", Employee.TypeEnum.Associate); foreach (var associate in employeeList.Associates) { Console.WriteLine("Associate {0}", ((Employee)associate).Name);//casting } foreach (var manager in employeeList.Managers) { Console.WriteLine("Manager {0}", ((Employee)manager).Name);//casting } foreach (var employee in employeeList) { Console.WriteLine("Employee {0}", ((Employee)employee).Name);//casting } Console.WriteLine(); Console.WriteLine("====Generic===="); ListIterator<Employee> employeeGenList = new ListIterator<Employee>(); employeeGenList.Add(new Employee { Name = "Jane", Type = Employee.TypeEnum.Manager }); employeeGenList.Add(new Employee { Name = "Tom", Type = Employee.TypeEnum.Manager }); employeeGenList.Add(new Employee { Name = "Brian", Type = Employee.TypeEnum.Associate }); employeeGenList.Add(new Employee { Name = "Ashley", Type = Employee.TypeEnum.Associate }); employeeGenList.Add(new Employee { Name = "Meriam", Type = Employee.TypeEnum.Associate }); foreach (var employee in employeeGenList.Where(e => e.Type == Employee.TypeEnum.Associate)) { Console.WriteLine("Associate {0}", employee.Name);//no casting } foreach (var employee in employeeGenList.Where(e => e.Type == Employee.TypeEnum.Manager)) { Console.WriteLine("Manager {0}", employee.Name);//no casting } foreach (var employee in employeeGenList) { Console.WriteLine("Employee {0}", employee.Name);//no casting } Console.ReadKey(); }