J’ai une List
avec des membres. Je voudrais List
la liste (et tous ses membres en particulier) dans un type List
, où ChildClass
hérite de BaseClass
. Je sais que je peux obtenir le même résultat avec une foreach:
List ChildClassList = new List(); foreach( var item in BaseClassList ) { ChildClassList.Add( item as ChildClass ); }
Mais y a-t-il une manière plus ordonnée de faire cela? Note – ceci est fait sur la plate-forme WP7.
Vous pouvez le faire si vous êtes vraiment sûr que tous les objects sont castables:
ChildClassList = BaseClassList.Cast().ToList();
Votre code actuel ajoute la valeur null
si un élément BaseClass ne peut pas être converti en ChildClass. Si telle était vraiment votre intention, ce serait équivalent:
ChildClassList = BaseClassList.Select(x => x as ChildClass).ToList();
Mais je préférerais suggérer ceci, ce qui inclut la vérification de type et évitera les éléments qui ne correspondent pas:
ChildClassList = BaseClassList.OfType().ToList();
Ce qui suit est presque équivalent à votre code actuel (la seule chose qui manque, c’est qu’il n’ajoute pas de valeur NULL pour les conversions ayant échoué):
var childList = baseList.OfType().ToList();
Cela ignorera les cas où la liste contient une autre classe dérivée autre que ChildClass
.
Vous pouvez aussi utiliser:
var childList = baseList.Cast().ToList();
Mais cela InvalidCastException
une InvalidCastException
sur les choses qu’il ne peut pas lancer.