251 votos

Cómo inicializar el Array vacío en C#

¿Es posible crear un Array vacío sin especificar el tamaño?

Por ejemplo, yo creé,

String[] a = new String[5];

¿Podemos crear el Array de cuerdas anterior sin el tamaño?

352voto

Oded Puntos 271275

Si vas a usar una colección de la que no sabes el tamaño de antemano, hay mejores opciones que los arreglos.

Usa un List<string> en su lugar - le permitirá añadir tantos artículos como necesite y si necesita devolver un Array, llame ToArray() en la variable.

var listOfStrings = new List<string>();

// do stuff...

string[] arrayOfStrings = listOfStrings.ToArray();

Si tú debe crear una matriz vacía que pueda hacer esto:

string[] emptyStringArray = new string[0];

147voto

hemant Puntos 512

pruebe esto:

string[] a= new string[] { };

28voto

MatthiasG Puntos 2755

Podrías inicializarlo con un tamaño de 0, pero tendrás que reiniciarlo, cuando sepas cuál es el tamaño ya que no puedes añadirlo al Array.

string[] a = new string[0];

6voto

nawfal Puntos 13500

En primer lugar, no tiene sentido declarar una matriz sin tamaño. Una matriz es sobre el tamaño . Cuando se declara un Array de tamaño específico, se especifica el número fijo de ranuras disponibles en una colección que puede contener cosas, y en consecuencia se asigna memoria.

Si quieres definir una colección cuando no sabes de qué tamaño podría ser posiblemente, Array no es tu elección, sino algo como un List<T> o similar.

Dicho esto, la única manera de declarar una matriz sin especificar el tamaño es tener una matriz vacía de tamaño 0 . hemant y Alex Dn proporciona dos maneras. Otra alternativa más simple es simplemente :

string[] a = { };

[ Los elementos dentro del soporte deben ser implícitamente convertibles al tipo definido, por ejemplo, string[] a = { "a", "b" }; ]

O una más:

var a = Enumerable.Empty<string>().ToArray();

Pero repito no hay mucho que puedas hacer con un conjunto de tamaño 0 . Para añadirle algo, tendrás que reiniciar de todas formas el Array existente (incluso si estás redimensionando el Array, ver este hilo )

De todos modos, sólo para seguir respondiendo a la pregunta original, aquí hay una forma más declarativa :

public static class Array<T>
{
    public static T[] Empty()
    {
        return Empty(0);
    }

    public static T[] Empty(int size)
    {
        return new T[size];
    }
}

Ahora puedes llamar:

var a = Array<string>.Empty();

//or

var a = Array<string>.Empty(5);

1voto

Alex Dn Puntos 2087

Como sé que no se puede hacer Array sin tamaño, pero se puede usar

List<string> l = new List<string>() 

y luego l.ToArray() .

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X