2012-07-27 3 views
10

나는 회원이 List<BaseClass>입니다. 목록 (및 모든 구성원을 구체적으로) 형식 List<ChildClass>으로 캐스팅하려고합니다. 여기에서 ChildClassBaseClass을 상속합니다. 나는 foreach를 통해 같은 결과를 얻을 수 있다는 것을 안다 :채우기 캐스팅 목록 <BaseClass> 목록에 <ChildClass>

List<ChildClass> ChildClassList = new List<ChildClass>(); 
foreach(var item in BaseClassList) 
{ 
    ChildClassList.Add(item as ChildClass); 
} 

그러나 더 좋은 방법이 있는가? 참고 -이 작업은 WP7 플랫폼에서 수행됩니다. 당신은 모든 항목이 주조되어 정말 확신하는 경우

답변

18

이 작업을 수행 할 수 있습니다하십시오 BaseClass로 항목이 ChildClass에 캐스팅 할 수없는 경우

ChildClassList = BaseClassList.Cast<ChildClass>().ToList(); 

현재 코드 null을 추가합니다.

ChildClassList = BaseClassList.Select(x => x as ChildClass).ToList(); 

하지만 난 오히려 유형 검사 포함,이 좋을 것과 일치하지 않는 항목을 건너 뜁니다 : 그건 정말 의도라면,이 동등 할 것이다 다음

ChildClassList = BaseClassList.OfType<ChildClass>().ToList(); 
+0

Botz의 방식으로 시도하십시오 ... –

+0

감사합니다 -이 경우에는 모든 요소가 지정된 유형인지 확신합니다. 스마트 클래스가 바보 같은 것을 상속받는 "멍청한"(속성 만) 및 "스마트 한"(모든 기능) 버전으로 모델을 분할했습니다. 첫 번째 예는 도움이 필요합니다. 감사합니다. 그건 너에게도 @Adam Houldsworth –

3

var childList = baseList.OfType<ChildClass>().ToList(); 

이 igno 것입니다 : 현재 코드 (유일한 누락 된 것은 실패했습니다 캐스트에 대한 널 (null)을 추가하지 않습니다입니다) 거의 해당 입니다 목록에 ChildClass이 아닌 다른 파생 클래스가 들어있는 인스턴스

var childList = baseList.Cast<ChildClass>().ToList(); 

을하지만 그것을 캐스팅 할 수없는 것들에 InvalidCastException가 발생합니다 :

당신은 또한 사용할 수 있습니다.

관련 문제