Почему IList <T>не имеет методов вставки, которые принимают IEnumerable <T>? - PullRequest
23 голосов
/ 13 июля 2009

Я нахожусь в ситуации, когда я просто хочу добавить значения в массиве строк (тип String []) к объекту с помощью IList . Быстрый просмотр MSDN показал, что метод Insert IList имеет только версию, которая принимает индекс и объект T, и не имеет версии, которая принимает IEnumerable вместо T. Значит ли это, что Я должен написать цикл над списком ввода, чтобы поместить значения в список назначения? Если это так, то мне кажется, что это очень ограниченный и довольно недружественный дизайн API. Может быть, я что-то упустил. Что делают эксперты C # в этом случае?

1 Ответ

38 голосов
/ 13 июля 2009

Поскольку интерфейс, как правило, является наименьшей функциональностью, необходимой для его использования, для снижения нагрузки на разработчиков. С 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);
...