如何将一系列项目添加到IListvariables

对于IList<T>没有AddRange()方法。

如何添加项目列表到IList<T>而不迭代项目和使用Add()方法?

AddRangeList<T>上定义,而不是接口。

您可以将variables声明为List<T>而不是IList<T>或将其转换为List<T>以访问AddRange

 ((List<myType>)myIList).AddRange(anotherList); 

如果你看看List的c#源代码 ,我认为List.AddRange()有一个简单的循环无法解决的优化问题。 所以,扩展方法应该简单地检查IList是否是一个List,如果是的话,使用它的本地AddRange()。

在源代码的周围,你会看到.NET的人在他们自己的Linq扩展中做类似的事情,比如.ToList()(如果是列表,则抛出它,否则就创build它)。

 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()类似的function。

你也可以写这样的扩展方法:

 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;