2010-05-04 18 views
5

아래 코드를 입력하면 오류가 발생합니다. 기본적으로 foreach는 레이블이 아닌 컨트롤을 가로 질러 갈 때 끊어집니다.foreach를 사용하여 컬렉션에서 특정 유형 만 반환 할 수 있습니까?

foreach (Label currControl in this.Controls()) { 

... 
} 

나는 이와 같이해야합니다.

foreach (Control currControl in this.Controls()) { 
    if(typeof(Label).Equals(currControl.GetType())){ 

    ... 
    } 

} 

아무도 유형을 확인하지 않고도 더 나은 방법을 생각할 수 있습니까? foreach가 Label이 아닌 객체를 건너 뛰게 할 수 있습니까? 당신이 .NET 3.5 이상에 경우를 참조하십시오

+0

.NET 3.5에 있습니까? LINQ를 사용할 수 있습니까? – Strelok

답변

6

브라이언이 가장 주신 T. 캐스트 할 수없는 형식을 무시이

foreach(var label in this.Controls().OfType<Label>()) { 
} 

OfType<T>과 같은 작업을 수행 할 수 있습니다 OfType에 대한 적절한 대답 그러나, 당신이 을 수행하는 경우에 유형을 검사하는 더 좋은 방법이 있다는 것을 지적하고 싶었습니다. 할 필요가 있습니다. 대신 현재의 코드 :

if(typeof(Label).Equals(currControl.GetType())){ 

... 
} 

당신은 사용할 수 있습니다

if (currControl is Label) 
{ 
    Label label = (Label) currControl; 
    // ... 
} 

나 :

Label label = currControl as Label; 
if (label != null) 
{ 
    // ... 
} 

참고이 대안 모두 Label의 서브 클래스를 포함하는 것을하는 당신을 원래 코드는 그렇지 않습니다.

+0

감사합니다. – Diskdrive

관련 문제