¿Cómo inicializo una matriz vacía en C#?
¿Es posible crear una matriz vacía sin especificar el tamaño?
Por ejemplo, creé:
String[] a = new String[5];
¿Podemos crear la matriz de cadenas anterior sin el tamaño?
Aceptado
Si va a utilizar una colección cuyo tamaño no conoce de antemano, existen mejores opciones que las matrices.
Utilice a en List<string>
su lugar: le permitirá agregar tantos elementos como necesite y, si necesita devolver una matriz, llame ToArray()
a la variable.
var listOfStrings = new List<string>();
// do stuff...
string[] arrayOfStrings = listOfStrings.ToArray();
Si debe crear una matriz vacía, puede hacer esto:
string[] emptyStringArray = new string[0];
En .NET 4.6, la forma preferida es utilizar un nuevo método Array.Empty
:
String[] a = Array.Empty<string>();
La implementación es concisa y utiliza cómo se comportan los miembros estáticos en clases genéricas en .Net :
public static T[] Empty<T>()
{
return EmptyArray<T>.Value;
}
// Useful in number of places that return an empty byte array to avoid
// unnecessary memory allocation.
internal static class EmptyArray<T>
{
public static readonly T[] Value = new T[0];
}
(código relacionado con el contrato eliminado para mayor claridad)
Ver también:
Array.Empty
código fuente en fuente de referencia- Introducción a
Array.Empty<T>()
- Marc Gravell - Asignación, Asignación, Asignación : mi publicación favorita sobre pequeñas asignaciones ocultas.