Какой быстрый способ конвертировать IEnumerable <Foo>в List <Foo>в C # 2.0? - PullRequest
0 голосов
/ 18 ноября 2009

мы все знаем медленный путь:

foreach..

Ответы [ 3 ]

16 голосов
/ 18 ноября 2009

Хорошим выбором является конструктор списка . .

IEnumerable<T> enumerable = ...;
List<T> list = new List<T>(enumerable);
5 голосов
/ 18 ноября 2009

Как насчет:

IEnumerable<T> sequence = GetSequenceFromSomewhere();
List<T> list = new List<T>(sequence);

Обратите внимание, что это оптимизировано для ситуации, когда последовательность оказывается IList<T> - тогда она использует IList<T>.CopyTo. В большинстве случаев он все равно будет O (n), но потенциально намного быстрее O (n), чем итерация :) (Это также позволяет избежать изменения размера при его создании.)

3 голосов
/ 18 ноября 2009

Вы хотите использовать метод .AddRange в общем списке.

List<string> strings = new List<string>();
strings.AddRange(...);

.. или конструктор ..

new List<string>(...);
...