I recently learned about List's .ConvertAll extension. I used it a couple times in code today at work to convert a large list of my objects to a list of some other object. It seems to work really well. However I'm unsure how efficient or fast this is compared to just iterating the list and converting the object. Does .ConvertAll use anything special to speed up the conversion process or is it just a short hand way of converting Lists without having to set up a loop?
C programming language is a machine-independent programming language that is mainly used to create many types of applications and operating systems such as Windows, and other complicated programs such as the Oracle database, Git, Python interpreter, and games and is considered a programming foundation in the process of ...
What is C? C is a general-purpose programming language created by Dennis Ritchie at the Bell Laboratories in 1972. It is a very popular language, despite being old. C is strongly associated with UNIX, as it was developed to write the UNIX operating system.
In the real sense it has no meaning or full form. It was developed by Dennis Ritchie and Ken Thompson at AT&T bell Lab. First, they used to call it as B language then later they made some improvement into it and renamed it as C and its superscript as C++ which was invented by Dr.
Compared to other languages—like Java, PHP, or C#—C is a relatively simple language to learn for anyone just starting to learn computer programming because of its limited number of keywords.
No better way to find out than to go directly to the source, literally :)
http://referencesource.microsoft.com/#mscorlib/system/collections/generic/list.cs#dbcc8a668882c0db
As you can see, there's no special magic going on. It just iterates over the list and creates a new item by the converter function that you specify.
To be honest, I was not aware of this method. The more idiomatic .NET way to do this kind of projection is through the use of the Select
extension method on IEnumerable<T>
like so: source.Select(input => new Something(input.Name))
. The advantage of this is threefold:
ConvertAll
is likely a remnant of the pre-C#3.0 days. It's not a very arcane method by any means and ConvertAll
is a pretty clear description, but it might still be better to stick to what other people know, which is Select
.IEnumerable<T>
, while ConvertAll
only works on instances of List<T>
. It doesn't matter if it's an array, a list or a dictionary, Select
works with all of them.Select
is lazy. It doesn't do anything until you iterate over it. This means that it returns an IEnumerable<TOutput>
which you can then convert to a list by calling ToList()
or not if you don't actually need a list. Or if you just want to convert and retrieve the first two items out of a list of a million items, you can simply do source.Select(input => new Something(input.Name)).Take(2)
.But if your question is purely about the performance of converting a whole list to another list, then ConvertAll
is likely to be somewhat faster as it's less generic than a Select
followed by a ToList
(it knows that a list has a size and can directly access elements by index from the underlying array for instance).
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With