Aparte de lo ya mencionado, también podrías usar una colección genérica de tipo
List<T>, al igual que un
ArrayList pero con miembros más productivos, hace uso de un buffer de arrays para almacenar los datos, los cuales son redimensionados dinámicamente (internamente) utilizando los métodos
List.Add() y
List.Remove() (entre otros).
List<persona> personas = new List<persona>();
personas.Add(persona individual);
personas.AddRange(array de persona);
ArrayList,
List<T>, ambas maneras son más productivas que utilizar un
Array nativo.
No existe manera de redimensionar dinámicamente un
Array, para redimensionar el tamaño de asignación debes usar
Array.Resize cómo ya han comentado, aunque una manera más óptima en cuestión de velocidad sería copiar el contenido del antiguo array a uno nuevo:
Public Shared Function ResizeArray(sourceArray As Array, newSize As Integer) As Array
Dim preserveLength As Integer = Math.Min(sourceArray.Length, newSize)
If (preserveLength > 0) Then
Dim newArray As Array = Array.CreateInstance(sourceArray.GetType.GetElementType, newSize)
Array.Copy(sourceArray, newArray, preserveLength)
Return newArray
Else
Return sourceArray
End If
End Function
Dim myArray(50) As Integer
Debug.
WriteLine(String.
Format("{0,-12}: {1}",
"Initial Size", myArray.
Length))
myArray = DirectCast(ResizeArray(myArray, myArray.Length + 50), Integer())
Debug.
WriteLine(String.
Format("{0,-12}: {1}",
"New Size", myArray.
Length))
Conversión online a C#:
public static Array ResizeArray(Array sourceArray, int newSize)
{
int preserveLength = Math.Min(sourceArray.Length, newSize);
if ((preserveLength > 0)) {
Array newArray = Array.CreateInstance(sourceArray.GetType.GetElementType, newSize);
Array.Copy(sourceArray, newArray, preserveLength);
return newArray;
} else {
return sourceArray;
}
}
//=======================================================
//Service provided by Telerik (www.telerik.com)
//=======================================================
int[] myArray
= new int[51]; Debug.WriteLine(string.Format("{0,-12}: {1}", "Initial Size", myArray.Length));
myArray = (int[])ResizeArray(myArray, myArray.Length + 50);
Debug.WriteLine(string.Format("{0,-12}: {1}", "New Size", myArray.Length));
Saludos