2009-03-22 3 views
2

난 어딘가에 여기에 어쨌든 내가 foreach 루프에서 특정 유형으로 반환 된 항목을 제한하는 방법을 보았다, 내가 올바르게 기억한다면, IEnumerable의 LINQ 확장과 유형 검사를위한 lambda . 나는 그것을 다시 찾을 수 없다.형식 제한 LINQ 확장명을 사용하여 foreach에

+0

나는 정말 당신이 "항목은 foreach 루프에서 반환 된"로 무슨 뜻인지 이해가 안 돼요. –

+0

@Thomas, foreach 루프는 실제로 개별 항목이 아닌 열거자를 만들고 열거 자 (Enumerator)는 객체를 반환하지만 '간단 함'을 겨냥했습니다. – ProfK

답변

3
다음과 같이의 경우 확장 메서드를 호출하여이 작업을 수행 할 수

:

foreach(var x in theCollection.Where(i => i.GetType() == typeof(DesiredType)) 
{ 
    // Do something to x 
} 

를하지만이는 .NET 프레임 워크에 내장되어 너무 유용하고 크리스 것입니다 위에 지적하고있다. IEnumerable에는 OfType이라는 확장 메서드가 있으며 here에 설명되어 있습니다. 그것을 사용하려면

, 당신은 같은 것을 할 것 :

foreach(var x in theCollection.OfType<int>()) 
{ 
    // Do something to x 
} 
+0

정확하게 똑같지는 않습니다. GetType()을 호출 한 다음 상수 연산자와 비교하면 상속 상황에서 다르게 동작합니다. "is"연산자 (즉, Where (i => i가 DesiredType 임))가 OfType에 더 가깝습니다. –

+0

네, 맞습니다. OfType은 "이 코드를 캐스팅 할 수 있습니까?"라는 질문을하므로 Type의 IsAssignableFrom() 메서드와 비슷합니다. –

8

이걸 찾으십니까?

public static IEnumerable<TResult> OfType<TResult>(
    this IEnumerable source 
) 
관련 문제