实现接口 IEnumerator, IEnumerable

 KenDemoApp
{
    /*
    //class UserCollection : IEnumerable
    class UserCollection
    {
        public UserCollection()
        {
            userList.Add("Ken");
            userList.Add("Tommy");

        }

        ArrayList userList = new ArrayList();

        #region IEnumerable Members

        public IEnumerator GetEnumerator()
        {
            return new MyEnumrator(userList);
        }

        #endregion
    }

     
    
*/

    
class UserCollection
    {
        
public UserCollection()
        {
            userList.Add(
"Ken");
            userList.Add(
"Tommy");

        }

        ArrayList userList 
= new ArrayList();

        
//public IEnumerable List
        
//{
        
//    get
        
//    {
        
//        return (IEnumerable)userList;
        
//    }
        
//}

        
#region IEnumerable Members

        
public IEnumerator GetEnumerator()
        {
            
return userList.GetEnumerator();
        }

        
#endregion
    }

    
//class MyEnumrator: IEnumerator
    class MyEnumrator
    {
        ArrayList list 
= new ArrayList();
        
int index;

        
public MyEnumrator(ArrayList l)
        {
            Reset();
            list 
= l;
        }

        
#region IEnumerator Members

        
public object Current
        {
            
get {
                
if (index < list.Count)
                    
return list[index];
                
else

                    
return null;
            }
        }

        
public bool MoveNext()
        {
            index
++;
            
return index < list.Count;
        }

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

        
#endregion
    }

    
//mutator interface!!!!!!!!!!!!!!!!!!!!!!!!!!!作用和好处:1.访问集合中的值类型数据 2.不需要拆箱
    interface IUser
    {
        
string Name { get;set;}
    }


    
//class User
    struct User: IUser
    {
        
public User(string name)
        {
            
this.name = name;
        }

        
string name;

        
public string Name
        {
            
get { return name; }
            
set { name = value; }
        }
    }

    
class UserManager
    {
        
public ArrayList onlineUsers = new ArrayList();
        
public UserManager()
        {
            
for (int i = 0; i < 10000000; i++)
                onlineUsers.Add(
new User(i.ToString()));
        }
    }
}

 

return userList.GetEnumerator();  这里,可以改为迭代器直接实现(C#2.0支持):

for (int i = 0; i < userList.Count; i++)
                
yield return userList[i];

 

调用代码,实例:

UserCollection users = new UserCollection();
            //((ArrayList)users.GetEnumerator()).RemoveAt(0);
            
//IEnumerator iterator = users.GetEnumerator();
            
//while (iterator.MoveNext())
            
//    Console.WriteLine(iterator.Current);


            
//foreach (object obj in users)
            
//    Console.WriteLine(obj);

            
//MyEnumrator myEnum = new MyEnumrator(new ArrayList() { "AAa", "bCCC" });


            
//如果实现了MoveNext方法,Current属性等,就可以通过下面的方法遍历对象集合;实际上,此时,刚好正是实现了接口IEnumerator。
            
//while (myEnum.MoveNext())
            
//    Console.WriteLine(myEnum.Current);

 

相关文章:

  • 2021-05-27
  • 2022-12-23
  • 2021-07-22
  • 2022-12-23
  • 2022-12-23
  • 2021-09-20
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2022-03-09
  • 2022-12-23
  • 2021-11-20
  • 2022-01-28
  • 2021-10-02
  • 2022-12-23
相关资源
相似解决方案