8
votes

T en classe? Addrange Icollection?

J'essaie de faire de la classe statique, d'ajouter à l'Icollection mais j'ai eu des problèmes que je ne peux pas sembler surmonter. C'est comme ça que je reçois pour que je puisse passer une icollection dans la méthode? parce que t est que cela dit que cela ne peut pas être résolu.

Et puis je me demande est là un moyen de faire addrange sur l'ICOLLECTION? P>

Je pensais à quelque chose comme ça mais maby je suis hors de mon Mind avec elle? P>

public static ICollection<T> add(this IEnumerable<T> list)
    {
        ICollection<T> collection = null;

        return collection.AddRange(list);            
    }


0 commentaires

4 Réponses :


17
votes

non, icollection n'a pas de addrange méthode - et même si c'était le cas, vous essayiez de Déréference null qui lancera un nullreferenceException . Vous n'avez pas spécifié de collection pour ajouter la liste à ... Qu'est-ce que vous essayez exactement de faire?

Vous pouvez créer (dire) une nouvelle liste - et cela a le Avantage d'avoir déjà un constructeur qui peut prendre un ienumerable : xxx

Cependant, à ce point, vous venez vraiment de réimplexer Enumérable.toliste () et donné un type de retour différent ...

Si vous souhaitez tout ajouter à une collection existante, vous voudrez peut-être quelque chose comme ceci: < Pré> xxx


7 commentaires

Aimez le nouveau nom ... Je n'avais aucune idée de qui c'était non plus. :-P


Il vous manque un argument de méthode générique :)


@Joel: Par conséquent, "à ce stade, vous venez vraiment de réimplément été énumérable.toliste () et lui a donné un type de retour différent ..." :)


Dans .NET 4.0 Liste a un AddRange méthode - également INSERTRANGE , Demoverange ... effectivement, MSDN montre qu'il est disponible en 3.5


@Aiabstract: Bien sûr, mais ceci est pour Icollection , pas Liste


dûment noté :) ... depuis Liste Implements ICOLLECTION Je pensais qu'il est pertinent.


Ne serait-il pas préférable d'avoir le SIG STATIC QUI STATIC Q AddTo (cette liste liste q, q collection) où Q: Icollection ? Cela aiderait à chaîner si vous vouliez garder le type d'entrée et de sortie identique?



4
votes

Si je comprends correctement, vous souhaitez ajouter un ienumerable code> à une collection vide.

ne serait-il pas plus facile de faire: P>

ICollection<MyObject> collection = GetIEnumerableOfMyObject().ToList();


2 commentaires

Je ne savais pas que je pourrais faire une ICollection puis faire la liste comme ça.


Liste Implements Icollection donc yup.



0
votes

Selon le type de collecte de votre liste source Une approche alternative consiste à utiliser < Code> Liste (t) .foreseach , comme dans: xxx

Cependant, la lisibilité de ceci est facile à contester .


0 commentaires

1
votes

Les autres moyens semblent supposer que votre iCollection est vide et / ou votre ICollection est un type de liste. Toutefois, si vous voulez addrange, vous pouvez prolonger la classe ICollection comme suit:

public static void AddRange<T>(this ICollection<T> ic, IEnumerable<T> ie)
{
    foreach (T obj in ie)
    {
        ic.Add(obj);
    }
}


0 commentaires