2009-07-12 130 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

相关问题