2012-07-27 1 views
10

私はList<BaseClass>にメンバーがあります。リスト(およびそのすべてのメンバーを具体的に)タイプList<ChildClass>にキャストしたいと思います。ここでChildClassBaseClassを継承しています。私はforeachのを通じて、同じ結果を得ることができます知っている:キャストされたキャスティングリストリスト<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:あなたの現在のコードとほぼ同等(唯一欠けているものは、それが失敗したキャストのためにヌルを追加しない場合)でありますリストにChildClass以外の別の派生クラスが含まれているインスタンス。

また、使用することができます。

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

しかし、これは、それはキャストすることはできませんものにInvalidCastExceptionをスローします。

関連する問題