为什么IList <t>没有采用IEnumerable <t>?</t> </t>的Insert方法

时间:2009-07-12 22:54:05

标签: c# generics ilist

我遇到的情况是我只想将字符串数组(类型String [])中的值附加到具有IList&lt; String&gt;的对象。在MSDN上的快速查找显示IList&lt; T&gt;的Insert方法仅具有获取索引和对象T的版本,并且没有采用IEnumerable&lt; T&gt;的版本。而不是T.这是否意味着我必须在输入列表上写一个循环以将值放入目标列表?如果是这样的话,那对我来说似乎是非常有限的,而且非常不友好的API设计。也许,我错过了一些东西。在这种情况下,C#专家做了什么?

1 个答案:

答案 0 :(得分: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);
}

et voila; IList<T>现在有AddRange

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