2009-07-12 1 views
23

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

et voila; IList<T> теперь AddRange:

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

вы могли бы сделать это, но его имеет свои риски, когда вы звоните AddRange, вы можете ожидать, что основной объект, чтобы иметь некоторое представление о том, что он работает на диапазоне. В сценарии привязки данных это может привести к запуску тысяч событий в сценарии, где одного события было бы достаточно. –

+0

@Sam; в самом деле; но это лучшее, что вы можете сделать через IList ; есть способы компенсировать, конечно ... –

+1

Спасибо за ответ Марк. Я все еще чувствую, что интерфейс должен быть разработан таким образом, чтобы удобство использования было больше, чем простота его реализации, учитывая, что добавление списка в другой список является такой общей операцией. Во всяком случае, метод расширения в этом случае отлично работает, поэтому не может быть что-то интересное. – Kei

 Смежные вопросы

  • Нет связанных вопросов^_^