2012-08-17 69 views

回答

23

如何:

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

可替代地,避免了中間陣列(但可能涉及更多的重新分配):

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

轉換回很容易與LINQ:

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

只是想知道,被推薦爲什麼會避免中間陣列? – l46kok 2012-08-17 07:43:41

+1

@ l46kok:所有其他條件相同的情況下,建議避免額外的中間拷貝。然而,在這種情況下,考慮到設置集合的典型大小,不清楚哪種方法更有效(由於額外的重新分配)並且可能不重要。 – 2012-08-17 07:45:10

+0

@MarceloCantos:總是?我不會那麼做。第一個代碼顯然比較簡單,考慮到(如你所說),這可能並不重要,我會堅持可能效率更低但更明顯的方法。 – 2012-08-17 07:55:14

1

使用List.ToArray()將List轉換爲數組,您可以使用它來添加值i你的StringCollection

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

//use sc here. 

this

+2

爲什麼你要做'string [] str = mylist.ToArray();'當你可以做'sc.AddRange(mylist.ToArray());'? – dtsg 2012-08-17 07:45:33

+2

@john:告訴他'mylist.ToArray()'返回和'AddRange()'會帶來什麼。 – 2012-08-17 07:46:15

+2

使用'.ToArray();'不是那麼明顯嗎? – dtsg 2012-08-17 07:49:06

0

下面是一個擴展方法的IEnumerable<string>轉換爲StringCollection。它和其他答案一樣,只是將其包裝起來。

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

我寧願:

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