foreach遍历访问的对象必须实现IEnumerable 或声明GetEnumerator
需要实现一个对象为可遍历的对象,必须实现IEnumerable或声明GetEnumerator 方法,其中,IEnumerable 不是必须实现,但是GetEnumerator 方法则必须声明:
例如,先声明一个Item类,该类用于遍历的实体
//先声明一个Item的对象,用于遍历的实体对象 public class Item { public int Id; public string Name; public int Price; public Item(int id, string name, int price) { Id = id; Name = name; Price = price; } }
接下来我们实现 IEnumerable ,同时实现 GetEnumerator 方法,注意这个接口不是一定要实现,但是GetEnumerator 一定要声明。
//接下来的类就是要暴露给外部调用,实现了IEnumerable 的itemList public class ItemList : IEnumerable// 这里也可以不实现 IEnumerable,但GetEnumerator必须实现 { private Item[] items; public int Count { get { return items.Length; }//拿到数组中的count } public ItemList(Item[] _items) { items = _items; } //必须实现GetEnumerator public IEnumerator GetEnumerator() { for (int i = 0; i < items.Length; i++) { yield return items[i];//通过yield 将通过index找到的item返回到迭代器foreach对象中 } } }
在Program.cs 中调用,遍历
ItemList itemList = new ItemList(new Item[] { new Item(1, "apple", 3), new Item(2, "banana", 3) }); foreach (var item in itemList) { Console.WriteLine(item); }