Csharp/CSharp Tutorial/Class/IEnumerator

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

Implements IEnumerator

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

   public User(string name) { this.name = name; }
   string name;
   public string Name { get { return name; } }

}; class DBManager : IEnumerable {

   public DBManager() {
       onlineUsers.Add(new User("T"));
       onlineUsers.Add(new User("K"));
       onlineUsers.Add(new User("E"));
   }
   ArrayList onlineUsers = new ArrayList();
   public IEnumerator GetEnumerator() {
       return new Enumerator(onlineUsers);
   }
   class Enumerator : IEnumerator {
       const string INVALID_RECORD = "Use MoveNext before calling Current";
       public Enumerator(ArrayList onlineUsers) {
           foreach (User user in onlineUsers) {
               this.onlineUsers.Add(user);
           }
           Reset();
       }
       ArrayList onlineUsers = new ArrayList();
       int index;
       public bool MoveNext() {
           return (++index < onlineUsers.Count);
       }
       public object Current {
           get {
               if (-1 == index)
                   throw new InvalidOperationException(INVALID_RECORD);
               if (index < onlineUsers.Count)
                   return onlineUsers[index];
               else
                   return null;
           }
       }
       public void Reset() { index = -1; }
   }
   static void Main(string[] args) {
       DBManager db = new DBManager();
       IEnumerator e = db.GetEnumerator();
       while (e.MoveNext()) {
           User user = (User)e.Current;
           Console.WriteLine("User={0}", user.Name);
       }
   }

}</source>