<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
IEnumerable介面是非常的簡單,只包含一個抽象的方法GetEnumerator(),它返回一個可用於迴圈存取集合的IEnumerator物件。對於所有陣列的遍歷,都來自IEnumerable介面。
IEnumerator物件有什麼呢?它是一個真正的集合存取器,沒有它,就不能使用foreach語句遍歷集合或陣列,因為只有IEnumerator物件才能存取集合中的項,假如連集合中的項都存取不了,那麼進行集合的迴圈遍歷是不可能的事情了。
public static void Test3() { MyInt temp = new MyInt(); foreach (int item in temp) Console.WriteLine(item); } //foreach的必須要實現IEnumerable和IEnumerator的介面 public class MyInt : IEnumerable { int[] temp = { 1, 32, 43, 343 }; public IEnumerator GetEnumerator() { return temp.GetEnumerator(); } }
相當於下面程式碼:
public static void Test1() { int[] myArray = { 1, 32, 43, 343 }; //獲取要遍歷的列舉數 IEnumerator myie = myArray.GetEnumerator(); //重置當前項,相當於把指標移到初始位置:position = -1; 一開始認識陣列的索引從「0」開始 myie.Reset(); //向前移動一個索引,返回Bool型別,判斷是否超出下標 while (myie.MoveNext()) { int i = (int)myie.Current;//從Object轉成對應型別 Console.WriteLine("Value: {0}", i); } }
包含一個屬性兩個方法
MoveNext:把當前的項移動到下一項(類似於索引值),返回一個bool值,這個bool值用來檢查當前項是否超出了列舉數的範圍!
Current:獲取當前項的值,返回一個object的型別!
Reset:顧名思義也就是把一些值恢復為預設值,比如把當前項恢復到預設狀態值!
//lamda表示式在陣列中查詢 public static void Test2() { List<string> fruits = new List<string> { "apple", "passionfruit", "banana", "mango", "orange", "blueberry", "grape", "strawberry" }; //List<string> query = fruits.Where(fruit => fruit.Length < 6).ToList(); IEnumerable<string> query = fruits.Where(fruit => fruit.Length < 6); foreach (string fruit in query) Console.WriteLine(fruit); }
只篩選出List中的元素長度小於6的值,然後列印出。
namespace ConsoleApplication1 { //定義Person類 public class Person { //初始化 public Person(string fName, string lName) { this.firstName = fName; this.lastName = lName; } //類成員 public string firstName; public string lastName; } //實現介面 public class People : IEnumerable { private Person[] _people; public People(Person[] pArray) { _people = new Person[pArray.Length]; for (int i = 0; i < pArray.Length; i++) { _people[i] = pArray[i]; } } IEnumerator IEnumerable.GetEnumerator() { return (IEnumerator)GetEnumerator(); } //獲取列舉數 public PeopleEnum GetEnumerator() { return new PeopleEnum(_people); } } public class PeopleEnum : IEnumerator { public Person[] _people; // Enumerators are positioned before the first element // until the first MoveNext() call. int position = -1; public PeopleEnum(Person[] list) { _people = list; } //向下推移索引,返回Bool型別值 public bool MoveNext() { position++; return (position < _people.Length); } //重置預設索引位置,預設下標為0 public void Reset() { position = -1; } object IEnumerator.Current { get { return Current; } } //當前索引值 public Person Current { get { try { return _people[position]; } catch (IndexOutOfRangeException) { throw new InvalidOperationException(); } } } } class Program { static void Main(string[] args) { //範例化Person Person[] peopleArray = new Person[3] { new Person("John", "Smith"), new Person("Jim", "Johnson"), new Person("Sue", "Rabon"), }; People peopleList = new People(peopleArray); foreach (Person p in peopleList) Console.WriteLine(p.firstName + " " + p.lastName); } } }
到此這篇關於C#中IEnumerable介面並實現自定義集合的文章就介紹到這了。希望對大家的學習有所幫助,也希望大家多多支援it145.com。
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45