IEnumerable和IEnumrator用法
先用一个修改过的代码来演示用法,只来干的,不来稀的。
[csharp
/*
* Created by SharpDevelop.
* User: Owner
* Date: 2012-12-14
* Time: 13:43
*
* To change this template use Tools | Options | Coding | Edit Standard Headers.
*/
using System;
using System.Collections;
/// <summary>
/// IEnumerable和IEnumrator组合起来使用实现foreach。
/// </summary>
namespace TestIEnumeratorAndIEnumratable
{
/// <summary>
/// 个体类:这个类保存了单个体的信息和一个方法
/// </summary>
public class 个体
{
public string 信息1;
public string 信息2;
public 个体(string 信息1, string 信息2)
{
this.信息1 = 信息1;
this.信息2 = 信息2;
}
public void 报数()
{
Console.WriteLine(this.信息1 + " = " + this.信息2);
}
}
/// <summary>
/// 集体类:继承自IEnumerable接口,并提供foreach的可能。
/// </summary>
public class 集体 : IEnumerable
{
/// <summary>
/// 集体就是一票个体
/// </summary>
private 个体[] 一票个体;
/// <summary>
/// 这个集体为了简便,是有初始的一群个体凑一块组成的。
/// </summary>
/// <param name="pArray"></param>
public 集体(个体[] pArray)
{
一票个体 = new 个体[pArray.Length];
for (int i = 0; i < pArray.Length; i++)
一票个体[i] = pArray[i];
}
/// <summary>
/// 接口IEnumerable的实现函数,获取foreach用到的迭代器
/// </summary>
/// <returns></returns>
public IEnumerator GetEnumerator()
{
return new 个体指针(一票个体);
}
}
/// <summary>
/// 个体指针:针对个体类的迭代器,继承自IEnumerator。
/// 提供了迭代器的走向函数支持。
/// </summary>
public class 个体指针 : IEnumerator
{
/// <summary>
/// 一票个体的指针
/// </summary>
public 个体[] 一票个体的指针;
/// <summary>
/// 迭代器当前位置的指示标志
/// </summary>
int 位置 = -1;
/// <summary>
/// 个体指针的赋值:指向一堆无管理的个体
/// </summary>
/// <param name="list"></param>
public 个体指针(个体[] list)
{
一票个体的指针 = list;
}
/// <summary>
/// 接口IEnumerator的实现函数,迭代器下移。foreach用到,我们不调用。
/// </summary>
/// <returns></returns>
public bool MoveNext()
{
位置++;
return (位置 < 一票个体的指针.Length);
}
/// <summary>
/// 接口IEnumerator的实现函数,迭代器复位。foreach用到,我们不调用。
/// </summary>
public void Reset()
{
位置 = -1;
}
/// <summary>
/// 接口IEnumerator的实现函数,获取当前值。foreach用到,我们不调用。
/// </summary>
public object Current
{
get
{
try
{
return 一票个体的指针[位置];
}
catch(IndexOutOfRangeException)
{