Csharp/CSharp Tutorial/Class/IEnumerable

Материал из .Net Framework эксперт
Перейти к: навигация, поиск

IEnumerable<T>

<source lang="csharp">using System; using System.Collections.Generic; public class Employee {

   public string Name;
   public string Title;
   public Employee(string name, string title) {
       Name = name;
       Title = title;
   }
   public override string ToString() {
       return string.Format("{0} ({1})", Name, Title);
   }

} public class Team {

   private List<Employee> teamMembers = new List<Employee>();
   public IEnumerator<Employee> GetEnumerator() {
       foreach (Employee tm in teamMembers) {
           yield return tm;
       }
   }
   public IEnumerable<Employee> Reverse {
       get {
           for (int c = teamMembers.Count - 1; c >= 0; c--) {
               yield return teamMembers[c];
           }
       }
   }
   public IEnumerable<Employee> FirstTwo {
       get {
           int count = 0;
           foreach (Employee tm in teamMembers) {
               if (count >= 2) {
                   yield break;
               } else {
                   count++;
                   yield return tm;
               }
           }
       }
   }
   public void AddMember(Employee member) {
       teamMembers.Add(member);
   }

} public class MainClass {

   public static void Main() {
       Team team = new Team();
       team.AddMember(new Employee("C", "C"));
       team.AddMember(new Employee("N", "K"));
       team.AddMember(new Employee("N", "S"));
       foreach (Employee member in team) {
           Console.WriteLine("  " + member.ToString());
       }
       foreach (Employee member in team.FirstTwo) {
           Console.WriteLine("  " + member.ToString());
       }
       foreach (Employee member in team.Reverse) {
           Console.WriteLine("  " + member.ToString());
       }
   }

}</source>

Supporting foreach with IEnumerable and IEnumerator

<source lang="csharp">using System; using System.Collections;

class Rainbow : IEnumerable, IEnumerator {

   private short IteratorIndex = -1;
  
   public IEnumerator GetEnumerator()
   {
       return this;
   }
  
   public object Current
   {
       get
       {
           switch(IteratorIndex)
           {
               case 0:
                   return "Red";
               case 1:
                   return "Orange";
               case 2:
                   return "Yellow";
               case 3:
                   return "Green";
               case 4:
                   return "Blue";
               case 5:
                   return "Indigo";
               case 6:
                   return "Violet";
               default:
                   return "*** ERROR ***";
           }
       }
   }
  
   public bool MoveNext()
   {
       IteratorIndex++;
       if(IteratorIndex == 7)
           return false;
       return true;
   }
  
   public void Reset()
   {
       IteratorIndex = -1;
   }
  
   public static void Main()
   {
       Rainbow MyRainbow = new Rainbow();
  
       foreach(string ColorName in MyRainbow)
           Console.WriteLine(ColorName);
   }

}</source>