HOWTO · Csharp
Agregar cadena a un array en C#
No hay un método integrado para agregar dinámicamente nuevos elementos a un array completamente lleno en C#.
En esta página
Un array en C# tiene una longitud fija, por lo que no puede agregar un elemento al mismo array en su lugar. Para agregar un valor, cree un array más grande o copie los valores en una colección redimensionable. Use List<T> cuando espere agregar valores repetidamente; use Array.Resize para un aumento único directo cuando el resultado deba seguir siendo un array. Los ejemplos usan cadenas, pero cualquiera de los dos enfoques funciona con otros tipos de elementos cuando el valor agregado tiene el tipo correspondiente.
Agregar un elemento a un array convirtiéndolo en una List<T>
Convierta el array existente en una List<T> y luego llame a List<T>.Add para agregar el nuevo valor a esa lista. En C#, List<T>.Add es el método de lista para agregar un elemento; no se puede llamar sobre el propio array. Vuelva a convertir la lista solo si el código posterior necesita un array. List<T> gestiona su capacidad a medida que crece, lo que la convierte en la opción más sencilla cuando se agregan varios valores. La conversión usa directamente el constructor de List<T>; no se requiere LINQ.
Este ejemplo completo ilustra cómo agregar una cadena y conservar un resultado en forma de array.
using System;
using System.Collections.Generic;
class Program
{
static void Main()
{
string[] items = { "One", "Two", "Three" };
string newItem = "New Element";
var list = new List<string>(items);
// List<T>.Add appends the new value to the list.
list.Add(newItem);
items = list.ToArray();
foreach (string item in items)
{
Console.WriteLine(item);
}
}
}
One
Two
Three
New Element
new List<string>(items) copia los valores del array en una lista. List<T>.Add agrega newItem a esa lista, y ToArray() crea el array que usa el resto del programa. Si el código posterior puede trabajar con una lista, conserve la lista y omita la conversión final.
La conversión de array a lista copia los elementos existentes, mientras que la lista puede crecer a medida que se agregan valores. Convertir de nuevo crea otro array, así que omita ese paso cuando la siguiente operación acepte una List<string>. Para un array genérico, use el tipo de lista correspondiente, como List<int> para un int[], y agregue valores de ese mismo tipo.
Agregar un elemento a un array con Array.Resize
Para agregar una sola vez cuando se requiere un array, llame a Array.Resize con el array por referencia y su nueva longitud, y luego asigne el valor en el último índice. Redimensionar crea un array de reemplazo y copia los valores existentes en él; el parámetro ref actualiza la variable para que haga referencia a ese reemplazo. El nuevo espacio está disponible en Length - 1 después del redimensionamiento.
Este ejemplo completo muestra la secuencia de redimensionar y asignar.
using System;
class Program
{
static void Main()
{
string[] items = { "One", "Two", "Three" };
string newItem = "New Element";
Array.Resize(ref items, items.Length + 1);
items[items.Length - 1] = newItem;
foreach (string item in items)
{
Console.WriteLine(item);
}
}
}
One
Two
Three
New Element
Después de la llamada, items hace referencia al array más grande, por lo que asignar en items.Length - 1 llena su espacio recién agregado. Esto es sencillo para un cambio único. Redimensionar repetidamente de uno en uno copia los valores existentes en cada llamada, así que use List<T> en su lugar para agregados repetidos.
Array.Resize recibe la variable del array por ref, por lo que la referencia actualizada sigue estando disponible a través de items después de la llamada. Aumente la longitud solicitada en el número de espacios adicionales necesarios y luego asigne cada nuevo valor a su índice correspondiente. Para un único valor agregado, el índice final es Length - 1; para varios agregados, complete cada nuevo índice antes de usar el array redimensionado en otro lugar. El tipo de elemento del array sigue determinando qué valores puede asignar.