0

ルートオブジェクトを保持する汎用リストがあるということは、次のことを意味します。

public class Component  
{  
}  

public class DBComponent : Component  
{  
}  

private List<Component> components;   

Linqを使用してDBComponent参照のみのリストを取得したいと思います。そのようなことを意味します:

List<DBComponent> dbComponents = components.FindAll(c => c is DBComponent);  

ただし、機能していないよう
です。誰かが機能するLinqコードを提供できますか?
ありがとう

4

5 に答える 5

4

あなたが探しています

IEnumerable<DBComponent> dbComponents = components.OfType<DBComponent>();
于 2012-09-09T16:52:51.637 に答える
2
List<DBComponent> dbComponents = components.OfType<DBComponent>().ToList();
于 2012-09-09T16:57:29.590 に答える
1

あなたのコードも有効であるように見えても、このようなものかもしれません。

var result = components.Where(c => (c as DBComponent)!=null)
于 2012-09-09T16:53:02.153 に答える
0
components.OfType<DBComponent>();
于 2012-09-09T16:53:20.050 に答える
0

OfTypeまたはCastメソッドのいずれかを使用する必要があります。主な違いはCast、Enumerableにターゲットタイプにキャストできない要素が含まれている場合、例外がスローされることです。OfTypeこの例外はスローされませんが、これらのタイプの要素をスキップするだけです。

さまざまなシナリオで、これらの方法はどちらも便利な場合があるため、選択するのはあなた次第です。EnumerableをあるタイプでフィルタリングしたいだけならOfType、それが必要だと思います。

于 2012-09-10T00:02:42.727 に答える