2012-08-17 15 views

Respuesta

23

Cómo sobre: ​​

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

Alternativamente, evitando la matriz intermedia (pero posiblemente con la participación más reasignaciones):

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

conversión de espalda es fácil con LINQ:

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

Sólo me preguntaba, ¿por qué se recomienda evitar la gama intermedia? – l46kok

+1

@ l46kok: En igualdad de condiciones, siempre se recomienda evitar copias intermedias adicionales. En este caso, sin embargo, no es obvio qué enfoque es más eficiente (debido a las reasignaciones adicionales) y probablemente no sea importante de todos modos, dado el tamaño típico de una colección de configuraciones. –

+0

@MarceloCantos: ¿Siempre? Yo no iría con eso. El primer código es claramente más simple, y dado que (como dices) probablemente no sea importante, me quedaré con el enfoque posiblemente menos eficiente pero más obvio. –

1

Uso List.ToArray() que convertirá List a una matriz que puede usar para agregar valores i n su StringCollection.

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

//use sc here. 

Leer this

+2

¿Por qué haces 'string [] str = mylist.ToArray();' cuando podrías hacer 'sc.AddRange (mylist.ToArray());'? – dtsg

+2

@john: para decirle qué haría 'mylist.ToArray()' y 'AddRange()'. –

+2

¿No es obvio al usar '.ToArray();'? – dtsg

0

Aquí es un método de extensión para convertir un IEnumerable<string> a un StringCollection. Funciona de la misma manera que las otras respuestas, simplemente lo envuelve.

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

yo preferiría:

Collection<string> collection = new Collection<string>(theList); 
Cuestiones relacionadas