Tip16 元素数量可变的情况下不应使用数组
数组一旦被创建,长度就不能改变。如果我们需要一个动态且可变长度的集合,就应该使用ArrayList或List<T>来创建。List<T>是ArrayList的泛型实现,它省去了拆箱和装箱带来的开销。
注:不能肆意对数组指定过大的长度,这会让数组成为一个大对象(占用内存超过85000字节的对象),大对象在回收过程中会带来效率很低的问题。
如果一定要动态改变数组的长度,一种方法是将数组转换为ArrayList或List<T>:
int[] iArr = { 0, 1, 2, 3, 4, 5, 6 };
ArrayList arrayListInt = ArrayList.Adapter(iArr);
arrayListInt.Add(7);
List<int> listInt = iArr.ToList<int>();
listInt.Add(7);
另一种方法(效率很低):是用数组的复制功能,创建一个名为ReSize的扩展方法,具体如下:
public static class ClassForExtensions
{
//
public static Array ReSize(this Array array, int newSize)
{
Type t = array.GetType().GetElementType();
Array newArray = Array.CreateInstance(t, newSize);
Array.Copy(array, 0, newArray, 0, Math.Min(array.Length, newSize));
return newArray;
}
}
调用如下:
//调用:
int[] iArr = { 0, 1, 2, 3, 4, 5, 6 };
iArr = (int[])iArr.ReSize(10);
最后建议——在元素数量可变的情况下不应使用数组