类型安全---泛型与非泛型
============================================================非泛型
-------------------------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();}}
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。