C#泛型集合实例应用浅析

C# 泛型集合了解之前我们明白集合是OOP中的一个重要概念,C#中对集合的全面支持更是该语言的精华之一。C# 泛型是C# 2.0中的新增元素(C++中称为模板),主要用于解决一系列类似的问题。这种机制允许将类名作为参数传递给泛型类型,并生成相应的对象。将泛型(包括类、接口、方法、委托等)看作模板可能更好理解,模板中的变体部分将被作为参数传进来的类名称所代替,从而得到一个新的类型定义。泛型是一个比较大的话题,在此不作详细解析,有兴趣者可以查阅相关资料。

C# 泛型集合类用起来十分的方便快捷。在这篇随笔里面,我将用链表来模拟c#中的 List﹤T﹥ 类的行为,废话不多说,下面来看我的实现代码,代码中已经写了注释,所以不再对代码进行额外的说明:

 
 
 
  1. using System.Collections;
  2. class MyList﹤T﹥
  3. {
  4. private MyListNode firstNode;//首节点
  5. private int count;//C# 泛型集合-节点计数
  6.  
  7. public MyList()
  8. {
  9. this.firstNode = null;
  10. this.count = 0;
  11. }
  12. //C# 泛型集合-得到List长度
  13. public int GetLength()
  14. {
  15. return this.count;
  16. }
  17. //增加一个节点
  18. public void AddElement(T data)
  19. {
  20. MyListNode first = this.firstNode;
  21. if(first==null)
  22. {
  23. this.firstNode=new MyListNode(data);
  24. this.count++;
  25. return;
  26. }
  27. while (first.next != null)
  28. {
  29. first = first.next;
  30. }
  31. first.next = new MyListNode(data);
  32. this.count++;
  33. }
  34. //C# 泛型集合-删除一个节点
  35. public bool Remove(T data)
  36. {
  37. MyListNode first = this.firstNode;
  38. if (first.data.Equals(data))
  39. {
  40. this.firstNode = first.next;
  41. this.count--;
  42. return true;
  43. }
  44. while (first.next!=null)
  45. {
  46. if (first.next.data.Equals(data))
  47. {
  48. first.next = first.next.next;
  49. this.count--;
  50. return true;
  51. }
  52. }
  53. return false;
  54. }
  55. //C# 泛型集合-得到指定索引上的集合元素
  56. public T GetAtIndex(int index)
  57. {
  58. int innercount = 1;
  59. MyListNode first = this.firstNode;
  60. if (index ﹥ count)
  61. {
  62. throw new Exception("Index out of boundary");
  63. }
  64. else
  65. {
  66. while (innercount ﹤ index)
  67. {
  68. first = first.next;
  69. innercount++;
  70. }
  71. return first.data;
  72. }
  73. }
  74. //在指定的索引上插入新的元素
  75. public void InsertAtIndex(int index,T data)
  76. {
  77. int innercount = 1;
  78. MyListNode first = this.firstNode;
  79. if (index ﹥ count)
  80. {
  81. throw new Exception("Index out of boundary");
  82. }
  83. if (index == 1)
  84. {
  85. this.firstNode = new MyListNode(data);
  86. this.firstNode.next = first;
  87. }
  88. else
  89. {
  90. while (innercount ﹤ index - 1)
  91. {
  92. first = first.next;
  93. innercount++;
  94. }
  95. MyListNode newNode = new MyListNode(data);
  96. newNode.next = first.next;
  97. first.next = newNode;
  98. }
  99. this.count++;
  100. }
  101. //C# 泛型集合-删除指定索引上的集合元素
  102. public void RemoveAtIndex(int index)
  103. {
  104. int innercount = 1;
  105. MyListNode first = this.firstNode;
  106. if (index ﹥ count)
  107. {
  108. throw new Exception("Index out of boundary");
  109. }
  110. if (index == 1)
  111. {
  112. this.firstNode = first.next;
  113. }
  114. else
  115. {
  116. while (innercount ﹤ index - 1)
  117. {
  118. first = first.next;
  119. innercount++;
  120. }
  121. first.next = first.next.next;
  122. }
  123. this.count--;
  124. }
  125. //C# 泛型集合-删除集合中的所有元素
  126. public void RemoveAll()
  127. {
  128. this.firstNode = null;
  129. this.count = 0;
  130. }
  131. //为实现该集合类能用foreach进行遍历
  132. public IEnumerator GetEnumerator()
  133. {
  134. MyListNode first = this.firstNode;
  135. while (first!= null)
  136. {
  137. yield return first.data;
  138. first = first.next;
  139. }
  140. }
  141. //内部节点类
  142. private class MyListNode
  143. {
  144. public T data { get; set; }//节点上的元素值
  145. public MyListNode next { get; set; }//节点的下一个节点
  146. public MyListNode(T nodeData)
  147. {
  148. this.data = nodeData;
  149. this.next = null;
  150. }
  151. }
  152. }

下面是C# 泛型集合对这个模拟类的使用:

 
 
 
  1. class Program
  2. {
  3. static void Main(string[] args)
  4. {
  5. MyList﹤string﹥ ml = new MyList﹤string﹥();
  6. ml.AddElement("xu");
  7. ml.AddElement("jin");
  8. ml.AddElement("lin");
  9. ml.AddElement("love");
  10. ml.AddElement("jasmine");
  11. ml.InsertAtIndex(4, "fiercely");
  12. ml.RemoveAtIndex(2);
  13. ml.Remove("lin");
  14. foreach (string s in ml)
  15. {
  16. Console.WriteLine(s);
  17. }
  18. }
  19. }

C# 泛型集合实例应用的基本内容就向你介绍到这里,希望对你了解和学习C# 泛型集合有所帮助。

当前标题:C#泛型集合实例应用浅析
分享URL:http://www.csdahua.cn/qtweb/news43/423243.html

网站建设、网络推广公司-快上网,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 快上网