public class GenericList<T> { private class Node { //當前節點值 private T data; public T Data { get { return data; } set { data = value; } } //節點的下一個節點 private Node next; public Node Next { get { return next; } set { next = value; } } //節點的上一個節點 private Node last; public Node Last { get { return last; } set { last = value; } } public Node(T t) { data = t; next = null; } } private Node firstNode; private Node lastNode; public void AddNode(T t) { Node node = new Node(t); node.Last = lastNode; if (lastNode != null) lastNode.Next = node; lastNode = node; if (firstNode == null) { firstNode = node; } } //要在自定義泛型集合上迭代 //必須實現該接口 public IEnumerator<T> GetEnumerator() { Node current = firstNode; while (current != null) { //yield return表達式以枚舉對象返回 yield return current.Data; current = current.Next; } } }
class GenericListTestTwo { static void Main() { // 類型參數為int GenericList<int> list = new GenericList<int>(); for (int a = 0; a < 5; a++) { list.AddNode(a); } foreach (int i in list) { System.Console.WriteLine(i); } //類型參數為string GenericList<string> strList = new GenericList<string>(); strList.AddNode("First Node"); strList.AddNode("Second Node"); foreach(string s in strList) { System.Console.WriteLine(s); } Console.Read(); } }