閑來無聊來自己做了一個簡單的'集合',用來加深自己對集合的理解
class listNode { private object value; public listNode(object _value) { this.value = _value; } public object Value { get { return value; } } public listNode Next { get; set; } public listNode Prev { get; set; } } //定義一個MyList集合 class MyList :IEnumerable { //用first和last標記鏈表的頭和尾 private listNode first; public listNode First { get { return first; } } private listNode last; public listNode Last { get { return last; } } //為集合添加元素的方法 public listNode Add(object node) { listNode newNode = new listNode(node); if (first == null) { first = newNode; last = first; } else { last.Next = newNode; last = last.Next; } return newNode; } //實現迭代功能 public IEnumerator GetEnumerator() { listNode current = first; while (current != null) { yield return current.Value; current = current.Next; } }
}
終於代碼,寫好了,來實例化看一下效果
class Program { static void Main(string[] args) { MyList list = new MyList(); list.Add(1); list.Add(5); list.Add(6); list.Add(10); foreach (var item in list) { Console.WriteLine(item); } Console.ReadKey(); } }
查看運行效果,大功告成
這不就是一個簡單的集合嗎?事實是這樣的嗎,其實這個MyList算不上是一個集合,只能算是一個鏈表,因為它與一個“合格”的集合比,還差的太多。上面代碼只簡單實現了一個簡單的Add方法,一個完整的集合是應該可以有增刪改查等許多復雜功能的啊。但是你也可以就把它當做一個集合(一個不完整的集合),甚至可以說,不光上面寫的MyList是一個集合,如果只要一個類只要實現類了迭代器的功能(上面的Imnumerable接口),那么這個類就是一個集合,因此它也就可以用foreach來遍歷。我們不能因為它不能因為這個集合的等功能不完整就說它不是集合吧。就好比一個人不能走路,不能說話,那他任然是一個人,總不能說他不是人吧。
C#集合:
1.迭代與集合的關系:一個類只要實現了迭代功能,就可以說它是一個集合;
2.集合與foreach的關系:如果一個類型(也可以說一個集合)能用foreach遍歷,那么該類型一定實現了Imnumerable接口,反之;
真正理解了的話,你會發現上面的兩點其實是一句話,至於什么是Imnumerable接口,也就是所謂的迭代器,之后有機會我也會相關的做出總結文檔,最后我們在上面的MyList多加一條數據list.Add("ddaad");你會發現並不會報錯,那是因為我在遍歷時給item用的var類型,那如果我把var改成int類型,程序就會報錯了,所以我們的這個集合和C#里的ArrayList一樣,在類型安全上有很大的問題,那怎么解決這個問題呢,答案就是用泛型