ToList Extension Method
This page was last reviewed on Apr 21, 2023.
Dot Net Perls
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.
Method notes. ToList creates a new List internally, with the List constructor. So we can replace its usage (for converting an array) with the constructor directly.
First example. 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.
Important System.Linq allows us to invoke the ToList extension method on the array reference.
Step 1 The program uses an array initializer to specify that the array has 4 elements.
Step 2 The ToList extension method is called on that array reference. ToList is an extension method from the System.Linq namespace.
Step 3 We access the 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
Benchmark. 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.
Version 1 This version of the code uses ToList to get a list from an array. The array creation is not included in the time.
Version 2 Here we use the List constructor to get a List from the array. The result is same as in version 1.
Result The 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)
Internals. The ToList method internally checks its parameter for null, which will occur if you try to use ToList on a null reference.
Then ToList invokes the List type constructor with the instance parameter. So it is a wrapper method for the List constructor.
A summary. 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.
Dot Net Perls is a collection of tested code examples. Pages are continually updated to stay current, with code correctness a top priority.
Sam Allen is passionate about computer languages. In the past, his work has been recommended by Apple and Microsoft and he has studied computers at a selective university in the United States.
This page was last updated on Apr 21, 2023 (rewrite).
© 2007-2024 Sam Allen.