2009-04-09 4 views
1

Quelqu'un at-il une méthode d'extension pour convertir rapidement les types dans un LinkedList<T> en utilisant un Converter<TInput, TOutput>?Non ConvertAll pour LinkedList <T>?

Je suis un peu surpris, où est le ConvertAll<TOutput>(delegate)?

Répondre

12

L'équivalent ConvertAll dans les méthodes d'extension pour Linq est appelé Select!

var result = myLinkedList.Select(x => FancyCalculationWith(x)) 
+0

+1 Sélectionnez == "map" (fonction d'ordre supérieur) –

+0

En supposant, bien sûr, que LinkedList implémente IEnumerable . Je ne suis pas familier avec LinkedList

+0

(La différence étant que List.ConvertAll est en mesure de pré-allouer un tampon de la bonne taille bien sûr, car il connaît la taille existante.) –

0

Cela dépend de ce que vous voulez en sortir, mais vous pouvez utiliser ensuite coulé à travers le énumèrent IEnumerable résultant.

public class Foo 
    { 
    ... 
    } 

    public class Bar : Foo 
    { 
    ... 
    } 

    var list = new LinkedList<Bar>(); 
    .... make list.... 

    foreach (var foo in list.Cast<Foo>()) 
    { 
     ... 
    } 
0

Comme tvanfosson says il est possible de Cast<T> mais si vous voulez éviter un InvalidCastException vous pouvez utiliser la méthode d'extension OfType<T> qui passera sous silence et les éléments dans la liste qui échouent la conversion au type du type générique paramètre que vous fournissez.

Questions connexes