怎么使用呢:
SimpleCollection<string> colletion = new SimpleCollection<string>(new string[] { "ranran", "Huaran" });
IEnumerator<string> enumorator = colletion.GetEnumerator();
while(enumorator.MoveNext())
{
Console.WriteLine(enumorator.Current);
}
foreach(var v in colletion)
{
Console.WriteLine(v);
}
Console.ReadKey();
还可以直接使用迭代器:
使用迭代器是另一种完全实现上面两个接口的方案,这是最为简便和可读的方法
而且使用迭代器可以很方便和快捷的设置各种枚举情况 如双重的迭代 反向的迭代 临时的集合和负责迭代等等 比上面的实现更为简单
迭代的关键字是yield 需要依靠一个迭代器块(注意是循环+yield return,或者 yiled break)
public class MyCollection:IEnumerable
{
private object[] array;
public MyCollection(object []items)
{
array = items;
}
public IEnumerator GetEnumerator() //实现都可以依靠编译器去完成
{
//foreach (object v in array)
//{
// yield return v;
//}
//关键字是yield 并不是foreach 我们也可以按照下面这个方法进行实现
for(int i=0;i<array.Length;i++)
{
yield return array[i];
}
//当然其它的while循环也可以。。
}
}
//实现:
MyCollection collection = new MyCollection(new object[] { 1, 2, 3 });
foreach(var v in collection)
{
Console.WriteLine(v);
}
可以自己设置迭代的情况:
public class MyCollection2:IEnumerable
{
private object[] array;
public MyCollection2(object []items)
{
array = items;
}
//可以在迭代器块中设置迭代的实现情况 即具体迭代多少个元素
//比如我们只想迭代4个元素
public IEnumerator GetEnumerator()
{
int count = 0;//设计一个标记位
foreach(object item in array)
{
++count;
yield return item;
if (count == 4) yield break; //break关键字 退出迭代 实际上迭代在实现当中就是一个循环 利用break跳出也合情合理
}
}
}
//////
MyCollection2 collection2 = new MyCollection2(new object[]{4,5,6,7,8});
//它就只会输出4,5,6,7
foreach (var v in collection2)
{
Console.WriteLine(v);
}
双重迭代:
/// <summary>
/// 下面演示双重迭代 即一次可以迭代两个集合中的元素
/// </summary>
public class MyColletion3:IEnumerable
{
private object[] List1;
public string[] List2;
public MyColletion3(object []items1,string []items2)
{
this.List1 = items1;
this.List2 = items2;
}
//下面进行双重迭代
public IEnumerator GetEnumerator()
{
//关键代码
for(int index=0;index<(List1.Length>List2.Length?List2.Length:List1.Length);index++)
{
yield return List1[index];
yield return List2[index];
}
}
}
////////
MyColletion3 collection3 = new MyColletion3(new object[] { 1, 2, 3, 5.5 }, new string[] { "RanRan", "Chengdu", "四川" });
foreach(var v in collection3)
{
Console.WriteLine(v);
}
//迭代结果是1 RanRan 2 Chengdu 3 四川










