============================================================非泛型

-------------------------LinkedListNode.cs类

usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;namespaceConsoleApplication1{publicclassLinkedListNode{//上一个对象//下一个对象//值publicLinkedListNodePrev{get;set;}publicLinkedListNodeNext{get;set;}publicobjectValue{get;privateset;}publicLinkedListNode(objecto){this.Value=o;}}}

-------------------------LinkedList.cs类

usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;usingSystem.Collections;namespaceConsoleApplication1{publicclassLinkedList:IEnumerable{//头部//尾部publicLinkedListNodeFirst{get;set;}publicLinkedListNodeLast{get;set;}publicLinkedListNodeAddValue(objecto){LinkedListNodelln=newLinkedListNode(o);if(First==null){First=lln;Last=lln;}else{LinkedListNodebuffer=Last;//缓存上一个对象Last.Next=lln;//设置上一个对象的Next(指定上一个对象的下一个对象是lln)Last=lln;//设置尾部对象为llnLast.Prev=buffer;//设置lln的上一个对象}returnlln;}publicIEnumeratorGetEnumerator(){LinkedListNodelln=First;while(lln!=null){yieldreturnlln.Value;lln=lln.Next;}}}}

-------------------------主方法

staticvoidMain(string[]args){LinkedListll=newLinkedList();ll.AddValue("asdas");ll.AddValue("sad");ll.AddValue("asdsdaas");ll.AddValue("asddsadaasdasdasas");foreach(objectoinll){Console.WriteLine(o);Console.ReadKey();}}

缺点:不断的装箱拆箱,数据类型不安全,代码性能差

============================================================泛型

-------------------------LinkListNode.cs

usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;namespaceConsoleApplication1{publicclassLinkListNode<T>{//上一对象//下一对象//值publicLinkListNode<T>Prev{get;set;}publicLinkListNode<T>Next{get;set;}publicTValue{get;privateset;}publicLinkListNode(Tvalue){this.Value=value;}}}

-------------------------LinkList.cs

usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;usingSystem.Collections;namespaceConsoleApplication1{publicclassLinkList<T>:IEnumerable<T>{//头部//尾部publicLinkListNode<T>First{get;set;}publicLinkListNode<T>Last{get;set;}publicLinkListNode<T>AddList(Tvalue){LinkListNode<T>lln=newLinkListNode<T>(value);if(First==null){First=lln;Last=lln;}else{LinkListNode<T>buffer=Last;Last.Next=lln;Last=lln;Last.Prev=buffer;}returnlln;}publicIEnumerator<T>GetEnumerator(){LinkListNode<T>lln=First;while(lln!=null){yieldreturnlln.Value;lln=lln.Next;}}IEnumeratorIEnumerable.GetEnumerator(){returnGetEnumerator();}}}

-------------------------主方法

staticvoidMain(string[]args){vari=newLinkList<int>();i.AddList(1);i.AddList(2);foreach(intlini){Console.WriteLine(l);Console.ReadKey();}}