FCL的習慣是給集合類提供一個Item元素,它在C#中被實現為一個索引器
當您創建了一個List,並沒有定義它可以容納多少對象。在List內添加元素使用Add()方法,列表會自已處理它內部的帳目,如例9-13所示。
例9-13 List的使用
using System;
using System.Collections.Generic;
using System.Text;
namespace ListCollection
{
//存儲於List內的一個簡單類
public class Employee
{
private int empID;
public Employee(int empID)
{
this.empID = empID;
}
public override string ToString()
{
return empID.ToString();
}
public int EmpID
{
get
{
return empID;
}
set
{
empID = value;
}
}
}
public class Tester
{
static void Main()
{
List<Employee> empList = new List<Employee>();
List<int> intList = new List<int>();
//填充List
for (int i = 0; i < 5; i++)
{
empList.Add(new Employee(i + 100));
intList.Add(i * 5);
}
//打印整數列表所有內容
for (int i = 0; i < intList.Count; i++)
{
Console.Write("{0} ", intList[i].ToString());
}
Console.WriteLine("\n");
//打印員工列表的所有內容
for (int i = 0; i < empList.Count; i++)
{
Console.Write("{0} ", empList[i].ToString());
}
Console.WriteLine("\n");
Console.WriteLine("empList.Capacity: {0}", empList.Capacity);
}
}
}
輸出結果:
0 5 10 15 20
100 101 102 103 104
empArray.Capacity: 16
(譯者注:很有意思,在我的電腦上empArray.Capacity輸出的是8,看樣子老外的電腦和操作系統跟我們的是有些不同)
在Array中,您定義了Array操作對象的數目,如果嘗試添加多於這個數目的元素,Array將引發一個異常。在List中,您不需要聲明List操作對象的數目。List有一個Capacity屬性,表示List能夠存儲的元素的數目:
public int Capacity { get; set; }
默認容量是16,當您添加第17個元素時,容量會自動翻倍為32。如果您改變for循環為:
for (int i = 0;i<17;i++)
輸出結果會變成這樣:
0 5 10 15 20 25 30 35 40 45 50 55 60 65 70 75 80
5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
empArray.Capacity: 32
您可以手動設置容量為任何等於或大於這個數目的數字。如果您把它設置為小於這個數目的數字,程序將引發一個ArgumentOutOfRangeException異常