在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<int> arrListInt = new List<int>();
arrListInt.Add(2);//void List<int>.Add(int item)
System.Collections.Generic.List<string> arrListString = new List<string>();
arrListString.Add("this is a test!");//void List<string>.Add(string item)
int result;
for (int i = 0; i < arrListInt.Count; i++)
{
result += arrListInt[i];
}
System.Collections.Generic.List<DateTime> arrListDateTime = new List<DateTime>();
arrListDateTime.Add(DateTime.Now);//void List<DateTime>.Add(DateTime item)
/*将光标放到Add方法上时,可以看出所需参数类型恰好是用户提供的*/
另外,假设想存储某种特定类型的数据(例如Int型),如果使用ArrayList,将用户添加的所有类型的数据都强制转换成object类型,导致编译器也无法识别,只有当运行时才能发现错误;而泛型集合List<T>则在编译时就会及时发现错误。