在C#中,Array.Resize<T>(ref T[] array, int newSize)
方法用于调整数组的大小。这个方法可以增大或缩小数组,并相应地复制现有元素到新的数组中。如果新数组的大小大于原数组,则新元素会被初始化为该类型的默认值(例如,对于引用类型,默认值是 null
;对于数值类型,默认值是 0
)。
以下是 Array.Resize
方法的一些关键点:
-
泛型方法:
Array.Resize
是一个泛型方法,这意味着我们可以为任何类型的数组调用它,而不需要进行类型转换。 -
引用传递:该方法通过引用传递数组(使用
ref
关键字),因此它会直接修改传入的数组变量,使其引用调整大小后的新数组。 -
复制元素:当数组大小改变时,
Array.Resize
会自动复制现有元素到新的数组中。如果数组被缩小,那么多余的元素会被丢弃;如果数组被增大,则新元素会被初始化为默认值。 -
性能:由于数组在内存中是连续存储的,因此调整数组大小(特别是增大数组)可能需要分配新的内存块并将现有元素复制到新位置,这可能会是一个相对昂贵的操作。
-
异常:如果
newSize
小于0,或者对于非零长度的数组,newSize
等于0(尽管空数组可以调整为任何大小),则Array.Resize
会抛出一个ArgumentOutOfRangeException
。
下面是一个使用 Array.Resize
方法的示例:
int[] myArray = { 1, 2, 3, 4, 5 };
// 将数组大小调整为7
Array.Resize(ref myArray, 7);
// 现在 myArray 包含 { 1, 2, 3, 4, 5, 0, 0 }
// 新增的元素被初始化为 int 类型的默认值,即 0
// 将数组大小调整为3
Array.Resize(ref myArray, 3);
// 现在 myArray 包含 { 1, 2, 3 }
// 后两个元素被丢弃了
请注意,在调整数组大小后,任何引用原数组的变量(如果它们是通过赋值得到的,而不是通过引用传递的)都将继续引用原始的、未调整大小的数组。只有传递给 Array.Resize
方法的变量(在这个例子中是 myArray
)会被更新以引用新的数组。