ConvertAll
não é uma extensão, é um método na classe de lista. Você não precisa chamar ToList
o resultado, pois já é uma lista:
List<int> list2 = list.ConvertAll(x => 2 * x);
Portanto, a diferença é que o ConvertAll
método só pode ser usado em uma lista e retorna uma lista. O Select
método pode ser usado em qualquer coleção que implemente a IEnumerable<T>
interface e retorna um IEnumerable<T>
.
Além disso, eles fazem o processamento de forma diferente, portanto, eles têm seus pontos fortes em diferentes situações. O ConvertAll
método percorre a lista e cria uma nova lista de uma vez, enquanto o Select
método usa a execução lenta e processa os itens apenas quando você precisa deles. Se você não precisa de todos os itens, o Select
método é mais eficiente. Por outro lado, depois de ConvertAll
devolver a lista, não é necessário guardar a lista original.