2009-07-12 50 views
23

我處於這種情況,我只想在字符串數組(字符串[])中添加值到IList <字符串>的對象。 MSDN快速查詢顯示,IList <T>的Insert方法只有一個版本,其中包含一個索引和一個對象T,並且沒有使用IEnumerable <T>而不是T的版本。這是否意味着我必須在輸入列表上編寫一個循環才能將值放入目標列表中?如果是這樣的話,它對我來說似乎非常有限且非常不友好的API設計。也許,我錯過了一些東西。 C#專家在這種情況下做了什麼?爲什麼IList <T>沒有插入方法需要IEnumerable <T>?

回答

38

因爲一個接口通常是使它可用的最少的功能,所以減輕了實現者的負擔。用C#3.0可以添加此作爲擴展方法:

public static void AddRange<T>(this IList<T> list, IEnumerable<T> items) { 
    if(list == null) throw new ArgumentNullException("list"); 
    if(items == null) throw new ArgumentNullException("items"); 
    foreach(T item in items) list.Add(item); 
} 

等瞧; IList<T>現在有AddRange

IList<string> list = ... 
string[] arr = {"abc","def","ghi","jkl","mno"}; 
list.AddRange(arr); 
+7

你能做到這一點,但是它有它的風險,當你打電話的AddRange,你可能期望的基本對象有一定的瞭解,它是在一個範圍內操作。在數據綁定的情況下,這可能最終在一個事件足夠的情況下觸發數千個事件。 – 2009-07-12 23:04:58

相關問題