2010-06-29 13 views
1

Si j'ai une collection commeRechercher une collection pour un sous-type en C#/LINQ

List<SomeAbstractBaseType> someList = new List<SomeAbstractBaseType>(); 

Et j'ai ajouté deux types d'enfants différents à cette collection (à savoir les deux types d'enfants héritent de SomeAbstractBaseType) comme celui-ci :

someList.Add(someChildOfType1); 
someList.Add(someChildOfType2); 
someList.Add(someOtherChildOfType1); 
someList.Add(someOtherChildOfType2); 

Dites que je souhaite interroger tous les éléments de someChildOfType1. Comment puis-je faire cela, je l'ai essayé ce qui suit (qui ne compile pas, peut covert de type enfant à type parent)

List<ChildType1> temp = someList.Where(x => x.GetType() == typeof(ChildType1)).ToList(); 

Toute idée comment je pourrais le faire?

+0

Je ne peux pas comprendre comment reproduire votre problème que votre code a fonctionné pour moi (pas d'erreur de compilation). Je l'ai compilé dans .NET 3.5/4.0 et tout a bien fonctionné. Dans les deux cas, vous pouvez opter pour 'Enumerable.OfType ()'. – Padel

Répondre

0

Enumerable.OfType<T>() méthode d'extension.

4
List<ChildType1> temp = someList.OfType<ChildType1>().ToList(); 
0

Enumerable.OfType<T>() est seulement disponible en .NET 3.5 et au-dessus il semble que vous avez besoin d'une solution qui fonctionne dans .NET 3.0

Le problème est que même si vous avez trouvé tous les sous-types, les La liste est toujours du type de base. Une façon de faire construire une liste des sous-types est d'utiliser ConvertAll pour jeter les objets que vous savez du type droit:

List<ChildType1> temp = someList.FindAll(x => x is ChildType1).ConvertAll(x => (ChildType1) x);