2012-08-17 21 views

risposta

23

stai:

StringCollection collection = new StringCollection(); 
collection.AddRange(list.ToArray()); 

alternativa, evitando la matrice intermedia (ma possibilmente coinvolgendo più riassegnazioni):

StringCollection collection = new StringCollection(); 
foreach (string element in list) 
{ 
    collection.Add(element); 
} 

conversione posteriore è facile con LINQ:

List<string> list = collection.Cast<string>().ToList(); 
+0

Chiedo solo, essere raccomandato perché dovrebbe evitare gamma intermedia? – l46kok

+1

@ l46kok: A parità di altre condizioni, si consiglia sempre di evitare copie intermedie aggiuntive. In questo caso, tuttavia, non è ovvio quale approccio sia più efficiente (a causa delle ulteriori riallocazioni) e probabilmente non è importante comunque, data la dimensione tipica di una raccolta di impostazioni. –

+0

@MarceloCantos: sempre? Non vorrei andare con quello. Il primo codice è chiaramente più semplice, e dato che (come dici tu) probabilmente non è importante, io rimango con l'approccio forse meno efficiente ma più ovvio. –

1

Uso List.ToArray() che converte List in una matrice che è possibile utilizzare per aggiungere valori i sul tuo StringCollection.

StringCollection sc = new StringCollection(); 
sc.AddRange(mylist.ToArray()); 

//use sc here. 

Leggi this

+2

Perché stai facendo 'string [] str = mylist.ToArray();' quando potresti semplicemente fare 'sc.AddRange (mylist.ToArray());'? – dtsg

+2

@john: Per dirgli cosa restituirebbe 'mylist.ToArray()' e 'AddRange()'. –

+2

Non è così ovvio usando '.ToArray();'? – dtsg

0

Ecco un metodo di estensione per convertire un IEnumerable<string> ad un StringCollection. Funziona allo stesso modo delle altre risposte, ma lo avvolge.

public static class IEnumerableStringExtensions 
{ 
    public static StringCollection ToStringCollection(this IEnumerable<string> strings) 
    { 
     var stringCollection = new StringCollection(); 
     foreach (string s in strings) 
      stringCollection.Add(s); 
     return stringCollection; 
    } 
} 
0

io preferirei:

Collection<string> collection = new Collection<string>(theList); 
Problemi correlati