Quelle est la meilleure façon d'ajouter un seul élément à une collection IEnumerable?
Je suis surpris de voir qu'il ne semble pas être une méthode pour ajouter un élément à une collection IEnumerable.
Comment puis-je ajouter un élément à une collection IEnumerable?
source d'informationauteur Daniel Allen Langdon
Vous devez vous connecter pour publier un commentaire.
Vous ne pouvez pas vraiment d'ajouter des éléments à un IEnumerable comme il est censé être en lecture seule. Votre meilleur pari est soit quelque chose comme:
ou
Le point de IEnumerable, c'est que c'est un readonly pull style de la collection. Si vous le souhaitez, vous pouvez simuler un complément en faisant quelque chose comme ceci:
Vous pouvez enchaîner avec un singleton tableau:
J'aimerais faire remarquer à certains des autres réponses ici que IEnumerable n'est pas en lecture seule collection, Il n'est pas une collection à tous. C'est une interface qui définit la façon dont une collection peut être itéré.
Si vous voulez ajouter des objets alors vous devriez être en ajoutant des objets pour votre béton classe de collection ou tout au moins à l'aide d'une interface différente.
En gardant à l'esprit ce que les autres ont dit à propos de ne pas vraiment pouvoir "ajouter" pour une énumération, vous pouvez toujours simuler l'ajout d'. En fait, je dirais que vous pouvez "ajouter" d'un élément à une séquence de morphing de la séquence dans une nouvelle séquence qui n'est en fait "contenir" l'élément (juste une itération sur la nouvelle séquence si vous ne me croyez pas!).
Vous pouvez également exprimer un seul élément comme une énumération quelque chose comme ceci:
ou
Ensuite, vous pouvez "ajouter" un élément d'une énumération comme ceci:
Vous pouvez même insérer l'élément dans le à un autre endroit dans la séquence comme cela (en supposant que vous connaissez la position après laquelle vous souhaitez insérer):
Une fois l'opération terminée (c'est à dire que vous avez manipulé votre ordre, de sorte qu'il "contient" ce que vous voulez pour contenir), vous aurez probablement envie de faire un tableau ou de la liste de la séquence via le ToArray ou ToList méthodes:
Maintenant itemsWithNewItemInserted est une liste qui contient tous les éléments de votre choix à partir de la liste d'origine, avec les nouveaux articles insérés dans le milieu.
Amusent avec des séquences trop comme ceci (en prenant, de sauter, de l'insertion, etc) peut vous coûter plus de temps parce que chaque ajout de la méthode d'extension (Prenez, Sauter, etc) peuvent causer de la séquence à être réitéré plusieurs fois, mais la liste de compréhension de la syntaxe, il est plus facile d'exprimer les opérations qui semblent être tout à fait un peu plus complexes, utilisant des méthodes conventionnelles d'itération.
Aussi, voici quelques liens qui traitent exprimant des éléments uniques comme IEnumerable:
Le passage d'un seul élément comme IEnumerable<T>
Est-il plus lisible linq façon "d'Union" d'un seul élément?
IEnumerable est en lecture seule collection, ICollection fournit une mutable collection avec Ajouter et Supprimer.
Cependant, vous pouvez créer un nouveau IEnumerable contiennent tous les éléments à l'origine, IEnumerable et un nouvel élément, par la concaténation de 2 listes:
IEnumerable
est conçu pour effectuer une itération sur les éléments. Il n'est pas toujours ont aussi une collection de son soutien. Aussi, pendant que vous êtes en boucle au travers d'une collection, vous ne pouvez pas modifier la collection.Si vous avez besoin de mettre à jour votre collection lors de l'itération sur elle, vous devez faire une copie avant de commencer votre
foreach
boucle. LINQToList()
méthode est une bonne façon de le faire.Peut-être pas la réponse que vous cherchez, mais en utilisant le générique de la collection de classes semblent toujours résoudre ce type de problèmes pour moi. La plupart d'entre eux ont une .Ajouter(T) de la méthode.