C#中要使一个类支持FOREACH遍历,实现过程怎样? [转]
http://blog.chinaunix.net/uid-20796829-id-466658.html
一個類型要想支持foreach則必須實現(xiàn)IEnumerable,IEnumerator兩個接口。??
//?Namespace:?System.Collections,?Library:?BCL?
public?interface?IEnumerable...{?
????IEnumerator?GetEnumerator();?
}?
?//?Namespace:?System.Collections,?Library:?BCL?
public?interface?IEnumerator...{?
????bool?MoveNext();?
????void?Reset();?
????object?Current?...{?get;?}?
}
?
實例:
using?System;
using?System.Collections.Generic;
using?System.Windows.Forms;
using?System.Collections;
namespace?Randam
{
????public?class?car
????{
????????string?name;
????????int?year;
????????public?car(string?str,?int?num)
????????{
????????????name = str;
????????????year = num;
????????}
????????public?string?Name
????????{
????????????get
????????????{
????????????????return?name;
????????????}
????????}
????}
????public?class?cars?:?IEnumerator,IEnumerable
???{
??????private?car[] carlist;
??????int?position = -1;
??????//Create internal array in constructor.
??????public?cars()
??????{
??????????carlist=?new?car[6]
??????????{
?????????????new?car("Ford",1992),
?????????????new?car("Fiat",1988),
?????????????new?car("Buick",1932),
?????????????new?car("Ford",1932),
?????????????new?car("Dodge",1999),
?????????????new?car("Honda",1977)
??????????};
??????}
??????//IEnumerator and IEnumerable require these methods.
??????public?IEnumerator?GetEnumerator()
??????{
?????????return?(IEnumerator)this;
??????????}
??????//IEnumerator
??????public?bool?MoveNext()
??????{
?????????position++;
?????????return?(position < carlist.Length);
??????}
??????//IEnumerable
??????public?void?Reset()
??????{position = 0;}
??????//IEnumerable
??????public?object?Current
??????{
?????????get
?????????{
????????????try?
????????????{
??????????????return?carlist[position];
????????????}
????????????catch?(IndexOutOfRangeException)
????????????{
??????????????throw?new?InvalidOperationException();
????????????}
?????????}
??????}
????????public?static?void?Main()
????????{
????????????cars?cars =?new?cars();
????????????foreach?(car?s?in?cars)
????????????{
????????????????Console.WriteLine("car’s value: {0}", s.Name);
????????????}
????????????IEnumerator?ienum = (IEnumerator)cars.GetEnumerator();
????????????ienum.Reset();
????????????Console.WriteLine("***************************");
????????????while?(ienum.MoveNext())
????????????{
????????????????car?s = (car)ienum.Current;
????????????????Console.WriteLine("car’s value: {0}", s.Name);
????????????}
????????}
???}??????
}
轉載于:https://www.cnblogs.com/Uinkanade/articles/3976864.html
總結
以上是生活随笔為你收集整理的C#中要使一个类支持FOREACH遍历,实现过程怎样? [转]的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JAVA js的escape函数、解析用
- 下一篇: 04_Java面向对象特征之继承与多态