2012-06-26 4 views
0

특정 형식에 대해서만 검사하고이를 반환하는 foreach 버전이 있는지 궁금합니다. > org.clixel.ClxObject - -> org.clixel.ClxSprite -> WindowsGame1.testC# 목록, Foreach 및 형식

그런 생각이 코드

org.clixel.ClxBasic :

예를 들어,이 클래스 트리를 고려

public List<ClxBasic> objects = new List<ClxBasic>(); 

foreach(GroupTester tester in objects) 
{ 
    tester.GroupTesterOnlyProperty = true; 
} 

tester.GroupTesterOnlyProperty는 GroupTester에서 생성 된 속성입니다. foreach의 과부하 또는 나를 도울 수있는 다른 스 니펫처럼이 작업과 같은 것을 만들 수있는 방법이 있습니까? 필자는 프로그래머가 원하는 형식 만 잡는 목록을 정렬하기 쉽도록 만들고 싶습니다.

+0

@Killercam :'이미'목록 '이다 objects'을, IEnumerable '인터페이스를 구현하고있다. Ofcourse. –

+0

. 나는 눈이 멀었습니다 ... – MoonKnight

+0

GroupTester가 클래스 계층 구조에 나타나지 않습니다. 관련없는 유형으로 '대상'을 어떻게 캐스팅 할 것으로 예상합니까? – Indy9000

답변

8

IEnumerable<T> 개체의 경우 OfType<T> 확장 방법을 사용할 수 있습니다.

귀하의 루프는 다음과 같이 수 :

foreach(GroupTester tester in objects.OfType<GroupTester>()) 
{ 
    tester.GroupTesterOnlyProperty = true; 
} 

참고 :이 있다고 가정합니다 ClxBasic에서 GroupTester 상속합니다.

3
@ThePower 제안 (후 삭제)으로
foreach(GroupTester tester in objects.OfType<GroupTester>()) 
{ 
    tester.GroupTesterOnlyProperty = true; 
} 

, 당신은 모든 개체를 반복 명시 적으로 유형을 확인할 수 있습니다 :

foreach(var tester in objects) 
{ 
    if (tester is GroupTester) 
    { 
     (tester as GroupTester).GroupTesterOnlyProperty = true; 
    } 
} 
+0

고마워요! 위대한 작품! 이 작은 발췌문을 나중에 사용할 수 있도록 보관할 것입니다. – redcodefinal

+0

Aww는 그것을 바꿔 놓았고, 다른 하나는 매우 유용했습니다! – redcodefinal

+0

@ user406470 게시 한 이래로 어떤 식 으로든 이것을 변경하지 않았습니다. –