2012-08-17 15 views

Odpowiedz

23

Jak o:

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

Alternatywnie, unikając pośredniego tablicę (ale która może obejmować więcej przesunięciami):

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

Konwersja tyłu jest łatwe LINQ:

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

prostu zastanawiasz się, dlaczego unika pośredni tablica jest zalecane? – l46kok

+1

@ l46kok: Wszystkie inne rzeczy są sobie równe, zawsze zaleca się unikanie dodatkowych kopii pośrednich. W tym przypadku nie jest jednak oczywiste, które podejście jest bardziej efektywne (z powodu dodatkowych przydziałów) i prawdopodobnie nie ważne, biorąc pod uwagę typowy rozmiar kolekcji ustawień. –

+0

@MarceloCantos: Zawsze? Nie poszedłbym z tym. Pierwszy kod jest wyraźnie prostszy i biorąc pod uwagę, że (jak mówisz) to prawdopodobnie nie jest ważne, trzymałbym się prawdopodobnie mniej skutecznego, ale bardziej oczywistego podejścia. –

1

użytkowania List.ToArray(), który zamieni listę na tablicę, której można użyć do dodania wartości i n twój StringCollection.

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

//use sc here. 

Czytaj this

+2

Dlaczego robisz 'string [] str = mylist.ToArray();' kiedy możesz po prostu zrobić 'sc.AddRange (mylist.ToArray());'? – dtsg

+2

@john: Aby mu powiedzieć, co powróci 'mylist.ToArray()' i 'AddRange()' wziął. –

+2

Czy nie jest to oczywiste przy użyciu '.ToArray();'? – dtsg

0

Oto metoda rozszerzenie do konwersji IEnumerable<string> do StringCollection. Działa tak samo, jak inne odpowiedzi, po prostu je zamyka.

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

Wolałbym:

Collection<string> collection = new Collection<string>(theList); 
Powiązane problemy