2012-08-09 7 views
2

LINQ에 대한 질문이 있습니다 (IEnumerable<>List<>). 나는 List<T>을하고 필터링하거나 검색 할 때확장 메소드 ToList <T>()을 사용하면 자원이 낭비되지 않습니까?

, 나는 다음과 같은 LINQ를 사용하십시오에 의해 반환

var psec = from p in MyListOfSomeObjects 
      where ((p.Tipo == tipo) || (p.Tipo == null)) 
      select p; 

그러나이 특정한 경우에, 내가 대신 IEnumerable<T>의, 실제 List<T> 필요 LINQ 쿼리.

List<T>를 얻을 수 psec.ToList<T>()를 사용할 수 있지만 내 질문은 :

가하는 방법 ToList<T>() 시간을 낭비 또는 컴퓨터 자원? 에 반복 또는 루프를 수행하여 List<T>을 구축합니까?

답변

5

Tolist <>() 낭비 시간이나 컴퓨터 리소스를 사용합니까?

이 달려있다. 목록이 필요하면 낭비가 아닐 수도 있습니다. 목록을 작성하는 데 시간과 자원을 사용합니다.

IEnumerable psec에서 반복적으로 수행하여 목록 <>을 만드시겠습니까?

예. 그것은 열거 형을 반복하고 그 안에있는 항목들로부터 목록을 만듭니다. 당신의 목표는 결과를 열거하는 단지의 경우 일반적

는 (즉하십시오 foreach 루프에 사용),이 ToList()를 통해 List<T>로 변환 할 필요 없다, 그래서 일을 그냥 낭비입니다.

+0

단일 LINQ 문으로 사용하는 경우 ToList의 옵티 마이즈가 어느 정도인지 알 수 있습니까? – James

+0

@James 아니요. 하나의 "선언문"에서 완료되었는지 여부는 중요하지 않습니다. 컴파일러는이를 동일한 방식으로 처리하고 메서드 호출 일뿐입니다. 'ToList()'는 단지''newList (sourceEnumerable)' –

+0

@James를 반환합니다. 당신이 다음과 같이했을 때와 완전히 똑같습니다 :'List newList = new List (psec);' –