C#에서 SelectAll과 ConvertAll의 차이
목록이 있습니다.
List<int> list = new List<int> { 1, 2, 3, 4, 5 };
내 목록의 요소에 변환을 적용하고 싶습니다.두 가지 방법으로 할 수 있습니다.
List<int> list1 = list.Select(x => 2 * x).ToList();
List<int> list2 = list.ConvertAll(x => 2 * x).ToList();
이 두 가지 방법의 차이점은 무엇입니까?
Select
LINQ 확장 방법이며 모두에서 작동합니다.IEnumerable<T>
반면에 사물들.ConvertAll
에 의해서만 구현됩니다.List<T>
.그ConvertAll
방법은 .NET 2.0 이후에 존재하는 반면 LINQ는 3.5와 함께 도입되었습니다.
당신은 호의를 베풀어야 합니다.Select
위에ConvertAll
모든 종류의 목록에 대해 작동하지만 기본적으로 동일하게 합니다.
ConvertAll
확장이 아니라 목록 클래스의 메서드입니다.전화하지 않으셔도 됩니다.ToList
이미 목록이기 때문에 결과:
List<int> list2 = list.ConvertAll(x => 2 * x);
그래서, 차이점은ConvertAll
메소드는 목록에서만 사용할 수 있으며 목록을 반환합니다.그Select
메소드는 다음을 구현하는 모든 컬렉션에 사용될 수 있습니다.IEnumerable<T>
인터페이스, 그리고 그것은 반환합니다.IEnumerable<T>
.
또한, 그들은 다르게 처리하기 때문에 다른 상황에서 그들의 강점을 가지고 있습니다.그ConvertAll
메소드는 목록을 실행하고 새 목록을 한 번에 만듭니다. 반면에Select
메소드는 느린 실행을 사용하고 필요한 항목만 처리합니다.만약 당신이 모든 아이템이 필요하지 않다면,Select
방법이 더 효율적입니다.반면에, 한 번은.ConvertAll
목록을 반환했습니다. 원래 목록을 보관할 필요가 없습니다.
첫 번째 답은 허용된 답이 아니어야 합니다.저는 전 2007 C# 마이크로소프트 MVP입니다.
받아들여진 반응과는 대조적으로,ConvertAll
의 조합보다 훨씬 효율적입니다.Select
그리고.ToList()
.
일단은.ConvertAll
더 빠르고 최소한의 메모리를 사용합니다.배열과 동일합니다.모두 변환 vs. 선택 및 ToArray.이는 더 큰 길이 배열 또는 루프 내의 많은 호출에서 훨씬 더 명확합니다.
1)ConvertAll
최종 목록의 크기를 알고 기본 배열의 재할당을 방지합니다. ToList
()는 배열 크기를 여러 번 계속 조정합니다.
2)ToList
인터페이스 속도가 느려집니다.IEnumerable<>
호출, 동안ConvertAll
추가 호출이나 범위 검사 없이 기본 배열을 순환합니다.
선택하면 추가 항목이 생성됩니다.IEnumerable<T>
물건.
이것이 조금 늦었다는 것을 알지만, 이것이 미래에 다른 사람들에게 유용할 수 있기 때문에 저는 여전히 추가했습니다.
EntityFramework 쿼리 식을 사용할 때는 나중에 사용할 식을 그대로 두는 대신 식을 평가하므로 ConvertAll()을 사용하지 않는 것이 좋습니다.이는 최종 표현식을 평가하기 전에 호출 횟수를 늘려야 하므로 데이터베이스 쿼리 실행 성능을 심각하게 저하시킵니다.
언급URL : https://stackoverflow.com/questions/1571819/difference-between-select-and-convertall-in-c-sharp
'programing' 카테고리의 다른 글
Linq에서 SQL Like %를 수행하는 방법은 무엇입니까? (0) | 2023.05.21 |
---|---|
Android용으로 개발할 때 이클립스 콘솔로 메시지를 출력하는 방법 (0) | 2023.05.21 |
Nodemon Error: "파일 감시자 수에 대한 시스템 제한에 도달했습니다. (0) | 2023.05.21 |
첫 번째 오류 시 중지 (0) | 2023.05.21 |
Python Panda가 셀에 목록을 삽입합니다. (0) | 2023.05.21 |