可枚举类型(IEnumerable和IEnumerator)
一、除数组以外,任何支持GetEnumerator()方法的类型都可以通过foreach结构进行运算。
public class person:IEnumerable { private car[] carArr=new car[2]; public person() { car[0]=new car('baoma',200,0); car[1]=new car('baoma',200,0); } public IEnumerator GetEnumerator() { return carArr.GetEnumerator(); } }
如果在对象级隐藏IEnumerable的功能,使用显示接口实现
public IEnumerator IEnumerable.GetEnumerator() { return carArr.GetEnumerator(); }
二、用yield关键字构建迭代器方法
不需要实现IEnumerable接口,但迭代器方法仍命名为GetEnumerator(),返回值仍为IEnumerator类型
public class person { private car[] carArr=new car[2]; public person() { car[0]=new car('baoma',200,0); car[1]=new car('baoma',200,0); } public IEnumerator GetEnumerator() { foreach (car c in carArr) { yield return c; } } }
三、构建命名迭代器
yield关键字可以结合任何方法一起使用,无论方法名是什么
public IEnumerable GetTheCars() { foreach(Car c in carArr) { yield return c; } }
调用yield+方法。
foreach(Car c in carObj.GetTheCars() ) { //使用c }
浙公网安备 33010602011771号