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