2009-02-06 7 views
1

무엇이 여기에 있습니까?목록에 Select()를 수행하는 데 문제가 있습니다. <T>

List<int> list = new List<int>(); 
//fill the list 
List<int> selections = (List<int>)list.Select(i => i*i); //for example 

그리고 나는 그것을 캐스팅하는 데 문제가 계속 :

나는 이런 식으로()을 선택하는 간단한 전화를하고 싶어. 내가 뭘 놓치고 있니? 당신이 캐스팅 할 수 물론 있도록 목록을 반환하지 않습니다

List<int> selections = list.Select(i => i*i).ToList(); 

답변

5

선택()는 ToList() operator를 사용해야합니다, 당신에게 IEnumerable을 <INT> 유형을 반환합니다 목록. 대신 ToList 방법을 사용할 수 있습니다

다른 사람이 말했듯이
list.Select(i => i*i).ToList(); 
2

선택() :

+0

대답은 정확하지만 "당연히"유효합니다 ... 기술적으로 Select (...) ** 결과는 List (IEnumerable 으로 마스크 됨) 일 수 있습니다. . 그것이 일어날 때, 그것은 아닙니다, 그러나 그것은 "물론"을 정당화하지 않습니다. –

2

Select 실제로 목록이 아닌 IEnumerable<T>를 반환 - 그것이 느리게 - 평가 반복자 블록의 결과입니다.

그러나, 당신은 목록을 처리하고 당신은 즉시 적당한 크기로 새 목록을 만들 수 있어요으로 더 효율적입니다 List<T>.ConvertAll를 사용하여 투사 이외의 아무것도 다시 밖으로 목록을 원하는 경우 :

List<int> selections = list.ConvertAll(i => i*i); 

효율성에 대해 특히 신경 쓰지 않는 한, 다른 LINQ 코드와의 일관성을 유지하기 때문에 Select에 집중할 것입니다.

관련 문제