using System; using System.Collections; using System.Collections.Generic; using System.Text; namespace chapter9 { public class LinkedListNode { private object value; public LinkedListNode(object value) { this.value = value; } public object Value { get { return value; } } private LinkedListNode next; public LinkedListNode Next { get { return next; } set { next = value; } } private LinkedListNode prev; public LinkedListNode Prev { get { return prev; } set { prev = value; } } } public class LinkedList : IEnumerable { private LinkedListNode first; public LinkedListNode First { get { return first; } } private LinkedListNode last; public LinkedListNode Last { get { return last; } set { last = value; } } public LinkedListNode AddLast(object node) { LinkedListNode newNode = new LinkedListNode(node); if (first == null) { first = newNode; last = first; } else { last.Next = newNode; last = newNode; } return newNode; } public IEnumerator GetEnumerator() { LinkedListNode current = first; while (current != null) { yield return current.Value; current = current.Next; } } } public class LinkedListNode<T> { private T value; public LinkedListNode(T value) { this.value = value; } public T Value { get { return value; } } private LinkedListNode<T> next; public LinkedListNode<T> Next { get { return next; } internal set { next = value; } } private LinkedListNode<T> prev; public LinkedListNode<T> Prev { get { return prev; } internal set { prev = value; } } } public class LinkedList<T> : System.Collections.Generic.IEnumerable<T> { private LinkedListNode<T> first; public LinkedListNode<T> First { get { return first; } } private LinkedListNode<T> last; public LinkedListNode<T> Last { get { return last; } } public LinkedListNode<T> AddLast(T node) { LinkedListNode<T> newNode = new LinkedListNode<T>(node); if (first == null) { first = newNode; last = first; } else { last.Next = newNode; last = newNode; } return newNode; } #region IEnumerable<T> 成员 public IEnumerator<T> GetEnumerator() { LinkedListNode<T> current = first; while (current != null) { yield return current.Value; current = current.Next; } } #endregion #region IEnumerable 成员 System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() { return GetEnumerator(); } #endregion } //default 值类型就返回0 应用类型就返回null class testDefault<T> { T value; public testDefault() { value = default(T); } public T getValue { get { return value; } } } /*范型约束 * where T:struct 类型T必须是结构 * where T:class 类型T必须是类 * where T:IFoo 类型T必须实现接口IFOO * where T:Foo 类型T必须实现抽象类FOO * where T:new() 类型T必须要有个默认的构造函数 * where T:U ??? */ //Nullable<T> 可空列表 //EventHandler<TEventArgs> public delegate void EventHandler<TEventArgs>(object sender,TEventArgs e) where TEventArgs:EventArgs //ArraySegment<T> ArraySegument<int> segment=new ArraySegment<int>(arr,2,3) 在这个array中从第二位取到第三位 class Program { static void Main(string[] args) { /*LinkedList list1 = new LinkedList(); list1.AddLast(2); list1.AddLast(4); list1.AddLast("6"); foreach (int i in list1) { Console.WriteLine(i); } */ LinkedList<string> list = new LinkedList<string>(); list.AddLast("2"); list.AddLast("four"); list.AddLast("foo"); foreach (string s in list) { Console.WriteLine(s); } Console.ReadLine(); } } }