Home
C#
List AddRange, InsertRange
Updated Mar 18, 2023
Dot Net Perls
AddRange, InsertRange. In C#, AddRange adds an entire collection of elements. It can replace tedious foreach-loops that repeatedly call Add on List.
List
foreach
We can pass any IEnumerable collection to AddRange, not just an array or another List. InsertRange() operates in a similar way, but receives a start position.
List Add
AddRange example. We look at the AddRange instance method from the base class library in the C# language on List. This example adds a range at the end of the List using the AddRange method.
int Array
Step 1 A new List is created, and 4 ints are added. An array of 3 elements of the same numeric type is initialized.
Array
Step 2 We call AddRange. The 3 values stored in the array are added to the end of the List.
Step 3 The program displays 7 integers, which are the union of the List itself and the array we added with AddRange.
Console.WriteLine
Tip The term "range" means an IEnumerable collection. Any type that implements IEnumerable can be used.
IEnumerable
using System; using System.Collections.Generic; // Step 1: create List and array. var list = new List<int>(); list.Add(1); list.Add(2); list.Add(5); list.Add(6); var array = new int[3]; array[0] = 7; array[1] = 6; array[2] = 7; // Step 2: call AddRange. list.AddRange(array); // Step 3: display the List contents. foreach (int value in list) { Console.WriteLine("VALUE: {0}", value); }
VALUE: 1 VALUE: 2 VALUE: 5 VALUE: 6 VALUE: 7 VALUE: 6 VALUE: 7
InsertRange example. This method places a collection of elements into a certain index of a List. The List resizes to accommodate the inserted elements.
Step 1 The program populates a new List instance with 4 integral values. Next it creates an array with 3 more values.
Step 2 We invoke InsertRange. The program inserts the array into the List at the second index.
Step 3 We display the contents of the List, which has the contents of the array added at the second index.
using System; using System.Collections.Generic; // Step 1: create List and array. var list = new List<int>(); list.Add(1); list.Add(2); list.Add(5); list.Add(6); var array = new int[3]; array[0] = 7; array[1] = 6; array[2] = 7; // Step 2: call InsertRange. list.InsertRange(1, array); // Step 3: display the elements. foreach (int value in list) { Console.WriteLine("VALUE: {0}", value); }
VALUE: 1 VALUE: 7 VALUE: 6 VALUE: 7 VALUE: 2 VALUE: 5 VALUE: 6
Internals. In .NET, InsertRange is implemented by using Array.Copy and the CopyTo instance method on arrays. The entire array inside the List will have to be copied.
Here This example shows the internal code for InsertRange. If the new range fits in the allocated size, the new range is simply copied.
But Sometimes 2 Array.Copy calls are needed: one for the elements before, and one for the elements after. A new array is allocated.
this.EnsureCapacity(this._size + count); if (index < this._size) { Array.Copy(...); } if (this == is2) { Array.Copy(...); Array.Copy(...); } else { T[] array = new T[count]; is2.CopyTo(array, 0); array.CopyTo(...); }
Internals, AddRange. The AddRange method is implemented with InsertRange. AddRange is a wrapper method on top of InsertRange—the target position is 0.
Performance, overview. AddRange and InsertRange are internally the same method. We know from the compiled code that the internal implementation normally calls Array.Copy or CopyTo.
Detail It is impossible for AddRange or InsertRange to perform better than a plain Array.Copy.
However Array.Copy itself may perform better than manually copying elements in a loop.
Array.Copy
A summary. AddRange appends a range of values to the end of a List. InsertRange places an array between the elements in a List. These 2 methods help with List range manipulations.
Dot Net Perls is a collection of pages with code examples, which are updated to stay current. Programming is an art, and it can be learned from examples.
Donate to this site to help offset the costs of running the server. Sites like this will cease to exist if there is no financial support for them.
Sam Allen is passionate about computer languages, and he maintains 100% of the material available on this website. He hopes it makes the world a nicer place.
This page was last updated on Mar 18, 2023 (simplify).
Home
Changes
© 2007-2025 Sam Allen