先声明本文只是代表我个人的想法,对不对望大家指点。
迭代器,IEnumerator和IEnumerable的目的就是实现我们自定义类可以实现类似list等CollectionBase类的foreach遍历。
IEnumerator和IEnumerable的关系:
迭代器返回就是IEnumerable或者是IEnumerator,这边提一下Ienumberable就是要实现GetEnumberator,而GetEnumberator就是返回Ienumberator。
IEnumerator是一个包含3个要实现的接口(Current,MoveNext,ReSet),总归我们要实现foreach遍历就必须实现Ienumerator。
实现Ieunmerable也是实现Ienumerator……这点必须清楚。
现在在说说迭代器和Ieunmerable的区别:
上面的IEnumerator,Ieunmerable都是系统自动返回我们提供的类中的枚举数,譬如我们提供一个类:
class Animal
{
public string Name { get; set; }
public int Year { get; set; }
}
Animal a = new Animal{
new Animal("Tom", 20));
new Animal("jack", 22));
new Animal("Jun", 29));
}
假如类实现了IEnumberator,遍历会自动的是 ("Tom", 20),("jack", 22),("jack", 22)。
但是我们要是用迭代器,我们可以自己添加要返回的东西,用yield return 来返回。
class Program
{
static void Main(string[] args)
{
//foreach里面in 后面必须实现 ienumerable
foreach (string s in Diedaiqi.Simp(new List
{ "222", "333", "4444" }))
{
Console.WriteLine(s);
}
}
public class Diedaiqi
{
//simp是迭代器 必须是静态 返回必须是 Ienumeralbe 或者 Ienumerator
public static IEnumerable Simp(List
str)
{
yield return "zhang";//这就是我们自己想返回的
yield return "wang";//这就是我们自己想返回的
foreach (string s in str)
yield return s;//这就是我们自己想返回的,但是是传过来的枚举数
yield return "End";//这就是我们自己想返回的
}
}
}
/*输出结果是
zhang
wang
222
333
444
End
*/
总结:迭代器就是可以对对象添加我们自己想要返回的枚举数和类中枚举数,Ienumerable就是返回类中自带的枚举数。