Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Difference between Select and ConvertAll in C#

Tags:

c#

.net

list

I have some List:

List<int> list = new List<int> { 1, 2, 3, 4, 5 }; 

I want to apply some transformation to elements of my list. I can do this in two ways:

List<int> list1 = list.Select(x => 2 * x).ToList(); List<int> list2 = list.ConvertAll(x => 2 * x).ToList(); 

What is the difference between these two ways?

like image 844
AndreyAkinshin Avatar asked Oct 15 '09 11:10

AndreyAkinshin


2 Answers

Select is a LINQ extension method and works on all IEnumerable<T> objects whereas ConvertAll is implemented only by List<T>. The ConvertAll method exists since .NET 2.0 whereas LINQ was introduced with 3.5.

You should favor Select over ConvertAll as it works for any kind of list, but they do the same basically.

like image 107
Oliver Hanappi Avatar answered Sep 21 '22 00:09

Oliver Hanappi


ConvertAll is not an extension, it's a method in the list class. You don't have to call ToList on the result as it's already a list:

List<int> list2 = list.ConvertAll(x => 2 * x); 

So, the difference is that the ConvertAll method only can be used on a list, and it returns a list. The Select method can be used on any collection that implements the IEnumerable<T> interface, and it returns an IEnumerable<T>.

Also, they do the processing differently, so they have their strengths in different situations. The ConvertAll method runs through the list and creates a new list in one go, while the Select method uses lazy execution and only processes the items as you need them. If you don't need all the item, the Select method is more efficient. On the other hand, once ConvertAll has returned the list, you don't need to keep the original list.

like image 44
Guffa Avatar answered Sep 21 '22 00:09

Guffa