0

List<>さまざまな種類のオブジェクトを含む抽象オブジェクトがあります。特定のタイプのすべてのアイテムを取得して、それらのアイテムを独自のものに設定しようとしていList<>ます。

これは機能していません -

//myAbstractItems is a List<myAbstractItem>
//typeAList inherents from myAbstractItem


var typeAList = ((List<itemTypeA>)myAbstractItems.Where(i => i.GetType() == typeof(itemTypeA)).ToList());

キャスティング(List<itemTypeA>)は失敗しているようです。

4

5 に答える 5

5

OfType拡張メソッドを使用します:

var typeAList = myAbstractItems.OfType<itemTypeA>().ToList();

ドキュメントから...

OfType(IEnumerable) メソッドは、 source内でTResult型にキャストできる要素のみを返します。

于 2013-07-24T14:49:00.203 に答える
0

これを行う別の方法は、OfType() メソッドを使用することです。

var typeAList = myAbstractItems.OfType<itemTypeA>().ToList();

このメソッドは、基本的に次の操作を実行します。

var typeAList = myAbstractItems.Where(i=>i is itemTypeA).Select(i=>i as itemTypeA).ToList();

ソース コレクションのいずれかの要素が null 参照である場合、これは失敗することに注意してください。

于 2013-07-24T14:53:35.817 に答える