ConvertAllне является расширением, это метод класса списка. Вам не нужно вызывать ToListрезультат, так как это уже список:
List<int> list2 = list.ConvertAll(x => 2 * x);
Итак, разница в том, что ConvertAllметод можно использовать только в списке, и он возвращает список. SelectМетод может быть использован в любой коллекции , которая реализует IEnumerable<T>интерфейс, и он возвращает IEnumerable<T>.
Кроме того, они по-разному выполняют обработку, поэтому в разных ситуациях у них есть свои сильные стороны. В ConvertAllметоде проходит через список и создает новый список за один раз, в то время как Selectметод использует ленивое выполнение и обрабатывает только те элементы , как вам необходимо. Если вам не нужен весь элемент, Selectметод более эффективен. С другой стороны, после ConvertAllвозврата списка нет необходимости сохранять исходный список.