2012-08-17 17 views

Antwort

23

Wie wäre:

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

Alternativ die Zwischenmatrix vermieden werden (aber möglicherweise mehr Umschichtungen Beteiligung):

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

Konvertieren zurück mit LINQ ist einfach:

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

Nur frage mich, warum sollte vermieden Zwischenmatrix zu empfehlen? – l46kok

+1

@ l46kok: Bei sonst gleichen Bedingungen empfiehlt es sich, zusätzliche Zwischenkopien zu vermeiden. In diesem Fall ist es jedoch nicht offensichtlich, welcher Ansatz effizienter ist (aufgrund der zusätzlichen Neuzuweisungen) und wahrscheinlich sowieso nicht wichtig ist, angesichts der typischen Größe einer Einstellungssammlung. –

+0

@MarceloCantos: Immer? Ich würde damit nicht gehen. Der erste Code ist eindeutig einfacher, und da er (wie Sie sagen) wahrscheinlich nicht wichtig ist, würde ich bei dem Ansatz bleiben, der möglicherweise weniger effizient, aber offensichtlicher ist. –

1

Verwenden List.ToArray(), die List in ein Array konvertiert, mit dem Sie Werte hinzufügen können n Ihre StringCollection.

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

//use sc here. 

lesen this

+2

Warum machst du? String [] str = mylist.ToArray(); 'wenn du einfach' sc.AddRange (mylist.ToArray()); '? – dtsg

+2

@john: Um ihm zu sagen, was 'mylist.ToArray()' zurückgibt und 'AddRange()' nimmt. –

+2

Ist das nicht offensichtlich, wenn '.ToArray();'? – dtsg

0

Hier ist eine Erweiterung Methode eine IEnumerable<string> zu einem StringCollection zu konvertieren. Es funktioniert genauso wie die anderen Antworten, schließt es einfach ein.

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

Ich würde es vorziehen:

Collection<string> collection = new Collection<string>(theList); 
Verwandte Themen