Хотя бегло и приятно, я бы больше интересовался добавлением AddRange
(или двух):
public static void AddRange<T>(this ICollection<T> collection,
params T[] items)
{
if(collection == null) throw new ArgumentNullException("collection");
if(items == null) throw new ArgumentNullException("items");
for(int i = 0 ; i < items.Length; i++) {
collection.Add(items[i]);
}
}
public static void AddRange<T>(this ICollection<T> collection,
IEnumerable<T> items)
{
if (collection == null) throw new ArgumentNullException("collection");
if (items == null) throw new ArgumentNullException("items");
foreach(T item in items) {
collection.Add(item);
}
}
Подход params T[]
позволяет AddRange(1,2,3,4,5)
и т. Д., А IEnumerable<T>
позволяет использовать такие вещи, как запросы LINQ.
Если вы хотите использовать свободный API, вы также можете написать Append
в качестве метода расширения в C # 3.0, который сохраняет исходный тип списка , путем соответствующего использования общих ограничений:
public static TList Append<TList, TValue>(
this TList list, TValue item) where TList : ICollection<TValue>
{
if(list == null) throw new ArgumentNullException("list");
list.Add(item);
return list;
}
...
List<int> list = new List<int>().Append(1).Append(2).Append(3);
(обратите внимание, что возвращается List<int>
)