如何让一个类可以被foreach枚举?
生活随笔
收集整理的這篇文章主要介紹了
如何让一个类可以被foreach枚举?
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
答:實現IEnumerable或其IEnumerable<T>。該接口只有一個函數?public IEnumerator GetEnumerator();
在這里,IEnumerator也是一個接口,我們將實現該接口的類稱之為枚舉數(enumerator)。
也就是說,任何一個可以被枚舉的類型,都可以通過GetEnumerator()得到這個枚舉數;反過來,任何一個類型,若想要其能被枚舉,那么必須實現IEnumerator接口的GetEnumerator()方法。
那么,如何實現GetEnumerator?
下面是三個版本的例子
例子1:非泛型
class Program{static void Main(string[] args){MyColors myColors=new MyColors();foreach (var myColor in myColors){Console.WriteLine(myColor);}Console.Read();}}class ColorEnumerator : IEnumerator{private string[] Colors;int position = -1;public bool MoveNext(){position++;if (position<Colors.Count()){return true;}return false;}public void Reset(){position = -1;}public object Current { get { return Colors[position]; } }public ColorEnumerator(string[] theColors){Colors = new string[theColors.Count()];for (int i = 0; i < theColors.Count(); i++){Colors[i] = theColors[i];}}}class MyColors : IEnumerable{private string[] Colors = {"Red","Yellow","Blue"};public IEnumerator GetEnumerator(){return new ColorEnumerator(Colors);}}?
例子二(泛型的方法):
class ColorEnumerator : IEnumerator<string>{private string[] Colors;int position = -1;public bool MoveNext(){position++;if (position<Colors.Count()){return true;}return false;}public void Reset(){position = -1;}object IEnumerator.Current{get { return Current; }}public string Current{get { return Colors[position]; }}public ColorEnumerator(string[] theColors){Colors = new string[theColors.Count()];for (int i = 0; i < theColors.Count(); i++){Colors[i] = theColors[i];}}public void Dispose(){}} class MyColors : IEnumerable<string>{private string[] Colors = { "Red", "Yellow", "Blue" };public IEnumerator<string> GetEnumerator(){return new ColorEnumerator(Colors);}IEnumerator IEnumerable.GetEnumerator(){return GetEnumerator();}}class Program{static void Main(string[] args){MyColors myColors = new MyColors();foreach (var color in myColors){Console.WriteLine(color);}Console.Read();}}例子三(迭代器方法):
class MyColors : IEnumerable{public IEnumerator GetEnumerator(){yield return "Blue";yield return "Yellow";yield return "Red";}}?
轉載于:https://www.cnblogs.com/Benjamin/p/4876990.html
總結
以上是生活随笔為你收集整理的如何让一个类可以被foreach枚举?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: WebRTC VideoEngine超详
- 下一篇: SD卡中FAT32文件格式快速入门(图文