ToList
This C# extension method converts collections (IEnumerables
) to List
instances. It is fast and easy-to-remember. It returns a List
instance with the appropriate elements.
ToList
creates a new List
internally, with the List
constructor. So we can replace its usage (for converting an array) with the constructor directly.
This program creates an array with an array initializer. It then converts that object data into a List
instance. The System.Linq
namespace is included.
System.Linq
allows us to invoke the ToList
extension method on the array reference.ToList
extension method is called on that array reference. ToList
is an extension method from the System.Linq
namespace.Count
of the List
, which is 4, and print this value to the Console
.using System; using System.Collections.Generic; using System.Linq; // Step 1: create a string array. string[] array = new string[] { "A", "B", "C", "D" }; // Step 2: call ToList for conversion. List<string> list = array.ToList(); Console.WriteLine(list.Count); // Step 3: use foreach to display the list. foreach (string value in list) { Console.WriteLine(value); }4 A B C D
We can compare the performance of ToList
and the List()
constructor. ToList
has some extra indirection, so this will likely cause a small performance penalty.
ToList
to get a list from an array. The array creation is not included in the time.List
constructor to get a List
from the array. The result is same as in version 1.List()
constructor performs slightly faster on an int
array. When possible, it is worth using the List
constructor.using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; const int _max = 1000000; int[] array = new int[] { 10, 20, 30, 40, int.MaxValue, int.MinValue }; var s1 = Stopwatch.StartNew(); for (int i = 0; i < _max; i++) { // Version 1: use ToList. var list = array.ToList(); if (list.Count != 6) { return; } } s1.Stop(); var s2 = Stopwatch.StartNew(); for (int i = 0; i < _max; i++) { // Version 2: use List constructor. var list = new List<int>(array); if (list.Count != 6) { return; } } s2.Stop(); Console.WriteLine(((double)(s1.Elapsed.TotalMilliseconds * 1000000) / _max).ToString("0.00 ns")); Console.WriteLine(((double)(s2.Elapsed.TotalMilliseconds * 1000000) / _max).ToString("0.00 ns"));108.43 ns ToList 102.45 ns List constructor (new List)
The ToList
method internally checks its parameter for null
, which will occur if you try to use ToList
on a null
reference.
ToList
invokes the List
type constructor with the instance parameter. So it is a wrapper method for the List
constructor.The C# ToList
extension method is often helpful in programs. We noted its usage in a trivial program, and also evaluated the method's implementation.