泛型与非泛型集合类在C#程序中是非常重要的一个基础概念,这里列一个表来进行对比:
|
非泛型集合类 |
泛型集合类 |
描述 |
|
ArrayList |
List<T> |
表示具有动态大小的对象数组 |
|
Hashtable |
Dictionary<Tkey,Tvalue> |
由键值对组成的集合 |
|
SortedList |
SortedList<Tkey,Tvalue> |
和字典相似但有排序功能的集合 |
|
Queue |
Queue<T> |
表示标准的先进先出(FIFO)队列 |
|
Stack |
Stack<T> |
后进先出(LIFO)队列,提供压入和弹出功能 |
泛型与非泛型集合类在概念和功能上各有不同,其中非泛型集合类在取出值时需要进行类型的转换操作,如果加入值类型会引起装箱和拆箱的操作,这会带来巨大的性能额外开销,如果掌握好泛型数组之后可以不再需要用非泛型的数组了,同时带来类型安全的好处并减少在值类型和引用类型之间的装箱和拆箱。
下面做一个例程来演示一下,
例程是顺手在WPF下做的,虽然不是C#winform,但差不多是一回事,界面代码就不贴了。
先做一个学生类:
public class student { public int Number { get; set; } public string Name { get; set; } public bool Sex { get; set; } public student(int _number, string _name, bool _sex) { Number = _number; Name = _name; Sex = _sex; } public override string ToString() { return string.Format("序号:{0},姓名:{1},性别:{2}", Number.ToString(), Name, Sex ? "男" : "女"); } }