LINQ, Where () 및 FindAll ()
LINQ의 Where (..)와 FindAll (..) 기능이 어떻게 다른지 설명 할 수 있습니까? 둘 다 같은 일을하는 것 같습니다 ...
FindAll()
List<T>
유형 에 대한 함수이며 와 같은 LINQ 확장 방법이 아닙니다 Where
. LINQ 확장 메서드는을 구현하는 모든 유형에서 작동하는 IEnumerable
반면 인스턴스 (또는 그로부터 상속되는 클래스 인스턴스) FindAll
에서만 사용할 수 있습니다 List<T>
.
또한 실제 목적이 다릅니다. 객체가 열거 될 때 요청시 실행 Where
되는 인스턴스를 반환합니다 IEnumerable
. 요청 된 요소가 포함 FindAll
된 새 항목 List<T>
을 반환합니다 . 의 인스턴스를 FindAll
호출 Where(...).ToList()
하는 것과 비슷 합니다 IEnumerable
.
나에게 가장 큰 차이점은 .FindAll은 .Net 2.0에서도 사용할 수 있다는 것입니다. 나는 항상 .Net 3.5에서 프로그래밍 할 고급 스러움을 가지고 있지 않기 때문에 .Net 일반 컬렉션의 '기본'방법을 기억하려고합니다.
LINQ 할 수 없기 때문에 이미 사용 가능한 List 메서드를 직접 구현 한 것은 여러 번 발생했습니다.
이 경우 편리한 점은 VS2008 을 사용하여 형식 유추와 람다 구문을 사용할 수 있다는 것입니다. 이들은 프레임 워크 기능이 아닌 컴파일러 기능입니다. 이것은 내가 이것을 쓸 수 있고 여전히 .Net 2.0 내에 남아 있음을 의미합니다.
var myOddNums = myNums.FindAll(n => n%2==1);
그러나 LINQ를 사용할 수있는 경우 지연된 실행과 즉시 실행의 차이를 유지하는 것이 중요합니다.
올바르게 기억한다면, 주요 차이점은 (실제로 구현 된 것 외에도 IEnumerable<T>
vs. List<T>
) Where
지연된 실행 을 구현한다는 것입니다. 예를 들어 foreach 루프에서 사용하여 실제로 필요할 때까지 조회를 수행하지 않습니다. FindAll
즉각적인 실행 방법입니다.
80K 객체 목록에서 몇 가지 테스트를 수행했으며 with를 Find()
사용하는 것보다 최대 1000 % 빠릅니다 . 각 통화 전후에 타이머를 테스트하기 전까지는 몰랐습니다. 때로는 같은 시간이었고 다른 때는 더 빨랐습니다.Where
FirstOrDefault()
참고 URL : https://stackoverflow.com/questions/1938204/linq-where-vs-findall
'development' 카테고리의 다른 글
std :: array와 std :: vector의 차이점은 무엇입니까? (0) | 2020.07.24 |
---|---|
레일에서 루비 (0) | 2020.07.24 |
포인터, 스마트 포인터 또는 공유 포인터? (0) | 2020.07.24 |
입력 옆에 레이블을 형태로 정렬 (0) | 2020.07.24 |
코드 랩 IntelliJ? (0) | 2020.07.24 |