для IList<T>
нет метода AddRange()
.
Как добавить список элементов в IList<T>
без итерации через элементы и с помощью метода Add()
?
для IList<T>
нет метода AddRange()
.
Как добавить список элементов в IList<T>
без итерации через элементы и с помощью метода Add()
?
AddRange
определяется на List<T>
, а не в интерфейсе.
Вы можете объявить переменную как List<T>
вместо IList<T>
или применить ее к List<T>
, чтобы получить доступ к AddRange
.
((List<myType>)myIList).AddRange(anotherList);
Если вы посмотрите на С# исходный код для списка, я думаю, что List.AddRange() имеет оптимизации, которые простой цикл не адресует, Таким образом, метод расширения должен просто проверять, является ли IList List, и если так, используйте его собственный AddRange().
Выбирая исходный код, вы видите, что люди .NET делают подобные вещи в своих собственных расширениях Linq для таких вещей, как .ToList() (если это список, отбросьте его... в противном случае создайте его).
public static class IListExtension
{
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");
if (list is List<T>)
{
((List<T>)list).AddRange(items);
}
else
{
foreach (var item in items)
{
list.Add(item);
}
}
}
}
Вы можете сделать что-то вроде этого:
IList<string> oIList1 = new List<string>{"1","2","3"};
IList<string> oIList2 = new List<string>{"4","5","6"};
IList<string> oIList3 = oIList1.Concat(oIList2).ToList();
Итак, в основном вы использовали бы расширение concat и ToList(), чтобы получить аналогичную функциональность как AddRange().
Вы также можете написать метод расширения следующим образом:
internal static class EnumerableHelpers
{
public static void AddRange<T>(this IList<T> collection, IEnumerable<T> items)
{
foreach (var item in items)
{
collection.Add(item);
}
}
}
Использование:
IList<int> collection = new int[10]; //Or any other IList
var items = new[] {1, 4, 5, 6, 7};
collection.AddRange(items);
который по-прежнему выполняет итерацию по элементам, но вам не нужно писать итерацию или прикладывать ее каждый раз, когда вы вызываете ее.
var var1 = output.listDepartment1
var var2 = output.listDepartment2
var1.AddRange(var2);
var list = var1;