国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

《C#高級(jí)編程》之泛型--1創(chuàng)建泛型類

2019-11-17 02:44:33
字體:
供稿:網(wǎng)友

《C#高級(jí)編程》之泛型--1創(chuàng)建泛型類

.NET自從2.0版本開始就支持泛型。

  • 非泛型鏈表

閑話休提,馬上來看下非泛型的簡(jiǎn)化鏈表類,它可以包含任意類型的對(duì)象。

LinkedListNode.cs中:


在鏈表中,一個(gè)元素引用另一個(gè)元素,所以必須創(chuàng)建一個(gè)類,將其封裝在鏈表中,并引用下一個(gè)對(duì)象。

 1     public class LinkedListNode 2     { 3         public LinkedListNode(object value) 4         { 5             this.Value = value; 6         } 7  8         public object Value { get; PRivate set; } 9 10         public LinkedListNode Next { get; internal set; }11         public LinkedListNode Prev { get; internal set; }12     }

LinkedListNode.cs中:


LinkedList類包含LinkedListNode類型的First,與Last屬性,它們分別標(biāo)志了鏈表的頭尾。通過實(shí)現(xiàn)GetEnumerator()方法,可以用foreach語句遍歷鏈表。

 1     public class LinkedList : IEnumerable 2     { 3         public LinkedListNode First { get; private set; } 4         public LinkedListNode Last { get; private set; } 5  6         public LinkedListNode AddLast(object node) 7         { 8             var newNode = new LinkedListNode(node); 9             if (First == null)10             {11                 First = newNode;12                 Last = First;13             }14             else15             {16                 Last.Next = newNode;17                 Last = newNode;18             }19             return newNode;20         }21 22         public IEnumerator GetEnumerator()23         {24             LinkedListNode current = First;25             while (current != null)26             {27                 yield return current.Value;28                 current = current.Next;29             }30         }

Program.cs中:


1             var list1 = new LinkedList();2             list1.AddLast(2);3             list1.AddLast(4);4             list1.AddLast("6");5 6             foreach (int i in list1)7             {8                 Console.WriteLine(i);9             }

此時(shí),會(huì)出現(xiàn)一個(gè)運(yùn)行異常,因?yàn)榘焰湵碇械?個(gè)元素轉(zhuǎn)換成整形時(shí)會(huì)出現(xiàn)異常。

  • 泛型鏈表

為了避免這種情況,下面創(chuàng)建泛型的鏈表。

LinkedListNode.cs中:


LinkedListNode類用一個(gè)泛型類型T聲明。屬性Value的類型是The,而不是object.

    public class LinkedListNode<T>   {      public LinkedListNode(T value)      {         this.Value = value;      }         public T Value { get; private set; }      public LinkedListNode<T> Next { get; internal set; }      public LinkedListNode<T> Prev { get; internal set; }   }

LinkedList.cs中:


也把LinkedList定義成泛型類。

 1     public class LinkedList<T> : IEnumerable<T> 2     { 3         public LinkedListNode<T> First { get; private set; } 4         public LinkedListNode<T> Last { get; private set; } 5  6         public LinkedListNode<T> AddLast(T node) 7         { 8             var newNode = new LinkedListNode<T>(node); 9             if (First == null)10             {11                 First = newNode;12                 Last = First;13             }14             else15             {16                 Last.Next = newNode;17                 Last = newNode;18             }19             return newNode;20         }21 22         public IEnumerator<T> GetEnumerator()23         {24             LinkedListNode<T> current = First;25 26             while (current != null)27             {28                 yield return current.Value;29                 current = current.Next;30             }31         }32 33         IEnumerator IEnumerable.GetEnumerator()34         {35             return GetEnumerator();36         }37     }

Program.cs中:


 1     class Program 2     { 3         static void Main() 4         { 5             var list2 = new LinkedList<int>(); 6             list2.AddLast(1); 7             list2.AddLast(3); 8             list2.AddLast(5); 9 10             foreach (int i in list2)11             {12                 Console.WriteLine(i);13             }14 15             var list3 = new LinkedList<string>();16             list3.AddLast("2");17             list3.AddLast("four");18             list3.AddLast(null);19 20             foreach (string s in list3)21             {22                 Console.WriteLine(s);23             }24             Console.Read();25 26         }

現(xiàn)在foreach是類型安全的了。


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 全州县| 盐池县| 长子县| 汤原县| 综艺| 蓬安县| 金坛市| 山西省| 余姚市| 渭源县| 贞丰县| 湘乡市| 综艺| 庆阳市| 锡林浩特市| 宾川县| 峨山| 宁河县| 新竹县| 盐亭县| 依安县| 博野县| 绿春县| 阿合奇县| 威海市| 平原县| 芮城县| 大新县| 宣化县| 当涂县| 武穴市| 化隆| 石泉县| 金阳县| 来宾市| 菏泽市| 缙云县| 南宁市| 察哈| 齐齐哈尔市| 平邑县|