Различие между выбором и ConvertAll в C#

Существует несколько мест, где комитет по стандарту C++ действительно не оптимизировал взаимодействие между средствами в стандартной библиотеке.

std::string и его использование в библиотеке один из них.

Еще один пример std::swap. Много контейнеров имеют функцию членства подкачки, но никакую перегрузку станд.:: подкачка предоставляется. То же идет для std::sort.

я надеюсь, что все эти мелочи будут зафиксированы в предстоящем стандарте.

110
задан abatishchev 24 August 2010 в 13:33
поделиться

2 ответа

Select является методом расширения LINQ и работает со всеми объектами IEnumerable , тогда как ConvertAll реализуется только List . Метод ConvertAll существует начиная с .NET 2.0, тогда как LINQ был представлен в версии 3.5.

Вы должны отдать предпочтение Выберите вместо ConvertAll , поскольку он работает для любого типа списков , но в основном они делают то же самое.

112
ответ дан 24 November 2019 в 03:14
поделиться

ConvertAll - это не расширение, это метод класса списка. Вам не нужно вызывать ToList для результата, так как это уже список:

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

Итак, разница в том, что метод ConvertAll можно использовать только для списка, и он возвращает список. Метод Select можно использовать в любой коллекции, реализующей интерфейс IEnumerable , и он возвращает IEnumerable .

Также, они выполняют обработку по-разному, поэтому в разных ситуациях у них есть свои сильные стороны. Метод ConvertAll просматривает список и создает новый список за один раз, в то время как метод Select использует отложенное выполнение и обрабатывает элементы только по мере необходимости. Если вам не нужны все элементы, более эффективен метод Выбрать . С другой стороны, как только ConvertAll вернет список, вам не нужно сохранять исходный список.

80
ответ дан 24 November 2019 в 03:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: