当前位置: 编程技术>.net/c#/asp.net
C#泛型学习笔记
来源: 互联网 发布时间:2014-08-30
本文导语: 很多非泛型集合类都有对应的泛型集合类,最好还是养成用泛型集合类的好习惯,它不但性能上好而且功能上要比非泛型类更齐全。 以下是常用的非C#泛型集合类以及对应的泛型集合类: 非泛型集合类 泛型集合类 ArrayList List ...
很多非泛型集合类都有对应的泛型集合类,最好还是养成用泛型集合类的好习惯,它不但性能上好而且功能上要比非泛型类更齐全。
以下是常用的非C#泛型集合类以及对应的泛型集合类:
非泛型集合类 泛型集合类
ArrayList List
HashTable DIctionary
Queue Queue
Stack Stack
SortedList SortedList
在1.1(C#2003中)用的比较多的集合类(非泛型集合)主要有 ArrayList类 和 HashTable类。后来2.0(C#2005中)增加了泛型功能,请通过下列代码段来理解泛型的优点:
代码示例:
//c#1.1版本(NET2003)
System.Collections.ArrayList arrList = new System.Collections.ArrayList();
arrList.Add(2);//int ArrayList.Add(object value)
arrList.Add("this is a test!");//int ArrayList.Add(object value)
arrList.Add(DateTime.Now);//int ArrayList.Add(object value)
int result;
for (int i = 0; i < arrList.Count; i++)
{
result += int.Parse(arrList[i].ToString());//发生InvalidCastException异常
}
/*将光标放到Add方法上时,显示“int ArrayList.Add(object value)”,表明参数需要OBJECT类型的;
*ArrayList虽然可以操作任何类型(int,string,datetime)的数据,但是,在添加时它们都需要被强制装箱成object,在读取时还要强制拆箱,
* 装拆箱的操作,对于几百条以上的大量数据来说对性能影响极大。
*/
//c#2.0版本(NET2005)
System.Collections.Generic.List arrListInt = new List();
arrListInt.Add(2);//void List.Add(int item)
System.Collections.Generic.List arrListString = new List();
arrListString.Add("this is a test!");//void List.Add(string item)
int result;
for (int i = 0; i < arrListInt.Count; i++)
{
result += arrListInt[i];
}
System.Collections.Generic.List arrListDateTime = new List();
arrListDateTime.Add(DateTime.Now);//void List.Add(DateTime item)
/*将光标放到Add方法上时,可以看出所需参数类型恰好是用户提供的*/
System.Collections.ArrayList arrList = new System.Collections.ArrayList();
arrList.Add(2);//int ArrayList.Add(object value)
arrList.Add("this is a test!");//int ArrayList.Add(object value)
arrList.Add(DateTime.Now);//int ArrayList.Add(object value)
int result;
for (int i = 0; i < arrList.Count; i++)
{
result += int.Parse(arrList[i].ToString());//发生InvalidCastException异常
}
/*将光标放到Add方法上时,显示“int ArrayList.Add(object value)”,表明参数需要OBJECT类型的;
*ArrayList虽然可以操作任何类型(int,string,datetime)的数据,但是,在添加时它们都需要被强制装箱成object,在读取时还要强制拆箱,
* 装拆箱的操作,对于几百条以上的大量数据来说对性能影响极大。
*/
//c#2.0版本(NET2005)
System.Collections.Generic.List arrListInt = new List();
arrListInt.Add(2);//void List.Add(int item)
System.Collections.Generic.List arrListString = new List();
arrListString.Add("this is a test!");//void List.Add(string item)
int result;
for (int i = 0; i < arrListInt.Count; i++)
{
result += arrListInt[i];
}
System.Collections.Generic.List arrListDateTime = new List();
arrListDateTime.Add(DateTime.Now);//void List.Add(DateTime item)
/*将光标放到Add方法上时,可以看出所需参数类型恰好是用户提供的*/
说明:
对于客户端代码,与ArrayList 相比,使用List (T) 时添加的唯一语法是声明和实例化中的类型参数。
虽然这种方式稍微增加了编码的复杂性,但好处是可以创建一个比ArrayList 更安全并且速度更快的列表。
另外,假设想存储某种特定类型的数据(例如Int型),如果使用ArrayList,将用户添加的所有类型的数据都强制转换成object类型,导致编译器也无法识别,只有当运行时才能发现错误;而泛型集合List则在编译时就会及时发现错误。
希望以上的介绍,对大家有所帮助。