14

List<BaseClass>メンバーが入っています。List<ChildClass>リスト(および特にそのすべてのメンバー)を、ChildClass継承するタイプにキャストしたいと思いBaseClassます。foreachを介して同じ結果を得ることができることを私は知っています:

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

しかし、これを行うためのより良い方法はありますか?注-これはWP7プラットフォームで行われます。

4

2 に答える 2

23

すべてのアイテムがキャスト可能であることが本当に確実な場合は、これを行うことができます。

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

nullBaseClassアイテムをChildClassにキャストできない場合、現在のコードが追加されます。それが本当にあなたの意図だった場合、これは同等です:

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

しかし、私はむしろこれを提案したいと思います。これにはタイプチェックが含まれ、一致しないアイテムはスキップされます。

ChildClassList = BaseClassList.OfType<ChildClass>().ToList();
于 2012-07-27T12:06:58.023 に答える
5

以下は、現在のコードとほぼ同等です(唯一欠けているのは、失敗したキャストに対してnullを追加しないことです)。

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

これは、リストに。以外の別の派生クラスが含まれているインスタンスを無視しますChildClass

次のものも使用できます。

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

しかし、これはInvalidCastExceptionそれがキャストできないものに投げかけます。

于 2012-07-27T12:08:32.440 に答える