In my mind it was always there that List is basically implemented using LinkedList, while normal Array is implemented as Contiguous blocks. I always tried to use List because of it is made using Generic and also might have the power of Dynamic Memory Allocation. But I was wrong.
Yesterday I saw the implementation of List using Reflector and found it is actually a Array of T(T[]). There are lots of Array.Copy around while manipulating each element in the List. For instance when you use Insert, it will create a new Memory and Copy all the Elements before /after the Insert elements. So it seem to me the use of List is very expensive.
I saw the SortedList as well. I am not sure why a SortedList also implements an Array inside it. Don't you think SortedList would be horrible to use an Array as you need to sort the list every time a minor manipulation to the List occurs.
I also wonder why List is so popular as most of the people use it rather than going for LinkedList as most of the times we neeed to manipulate a List and Bind the list for only once. Is it only because of the flexibility of Indexer ?
What do you think ?