HOWTO · Csharp
Aggiungere una stringa a un array in C#
Non esiste un metodo predefinito per aggiungere dinamicamente nuovi elementi a un array completamente riempito in C#.
In questa pagina
Un array in C# ha una lunghezza fissa, quindi non è possibile aggiungere un elemento allo stesso array sul posto. Per aggiungere un valore, crea un array più grande o copia i valori in una raccolta ridimensionabile. Usa List<T> quando prevedi di aggiungere valori ripetutamente; usa Array.Resize per un aumento singolo diretto quando il risultato deve rimanere un array. Gli esempi usano stringhe, ma entrambi gli approcci funzionano con altri tipi di elementi quando il valore aggiunto ha il tipo corrispondente.
Aggiungere un elemento a un array convertendolo in una List<T>
Converti l’array esistente in una List<T>, quindi chiama List<T>.Add per aggiungere il nuovo valore a tale elenco. In C#, List<T>.Add è il metodo dell’elenco per aggiungere un elemento; non può essere chiamato sull’array stesso. Riconverti l’elenco solo se il codice successivo necessita di un array. List<T> gestisce la sua capacità man mano che cresce, rendendola la scelta più semplice quando si aggiungono più valori. La conversione usa direttamente il costruttore di List<T>; LINQ non è richiesto.
Questo esempio completo illustra l’aggiunta di una stringa e il mantenimento di un risultato come 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 i valori dell’array in un elenco. List<T>.Add aggiunge newItem a tale elenco e ToArray() crea l’array usato dal resto del programma. Se il codice successivo può lavorare con un elenco, mantieni l’elenco e salta la conversione finale.
La conversione da array a elenco copia gli elementi esistenti, mentre l’elenco può crescere man mano che vengono aggiunti valori. La riconversione crea un altro array, quindi ometti quel passaggio quando l’operazione successiva accetta una List<string>. Per un array generico, usa il tipo di elenco corrispondente, come List<int> per un int[], e aggiungi valori dello stesso tipo.
Aggiungere un elemento a un array con Array.Resize
Per un’aggiunta singola quando è richiesto un array, chiama Array.Resize con l’array per riferimento e la sua nuova lunghezza, quindi assegna il valore all’ultimo indice. Il ridimensionamento crea un array sostitutivo e vi copia i valori esistenti; il parametro ref aggiorna la variabile affinché faccia riferimento a tale sostituto. Il nuovo slot è disponibile in Length - 1 dopo il ridimensionamento.
Questo esempio completo mostra la sequenza di ridimensionamento e assegnazione.
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
Dopo la chiamata, items fa riferimento all’array più grande, quindi assegnare a items.Length - 1 riempie il suo slot appena aggiunto. Questo è semplice per una modifica una tantum. Ridimensionare ripetutamente di uno copia i valori esistenti a ogni chiamata, quindi usa invece List<T> per aggiunte ripetute.
Array.Resize riceve la variabile dell’array per ref, ed è per questo che il riferimento aggiornato rimane disponibile tramite items dopo la chiamata. Aumenta la lunghezza richiesta del numero di slot aggiuntivi necessari, quindi assegna ogni nuovo valore al suo indice corrispondente. Per un singolo valore aggiunto, l’indice finale è Length - 1; per più aggiunte, riempi ogni nuovo indice prima di usare l’array ridimensionato altrove. Il tipo di elemento dell’array determina comunque quali valori puoi assegnare.