Supprimer un élément à partir d'un IEnumerable<T> collection
J'ai un popuplated IEnumerable<User>
collection.
Je veux supprimer un élément de celui-ci, comment puis-je faire cela?
foreach(var u in users)
{
if(u.userId = 1123)
{
//remove!
}
}
Je sais que ta pas penser à supprimer tout en boucle, donc je n'ai pas l'esprit, soit en créant une nouvelle collection ou de l'enlever après.
Mais je ne sais pas comment faire pour supprimer un élément, un peu perdu pour une raison sur cette!
En alternance qui je suis confus aussi, comment puis-je créer une nouvelle collection comme:
IEnumerable<User> modifiedUsers = new List<User>();
foreach(var u in users)
{
if(u.userId != 1233)
{
modifiedUsers.add ??????
}
}
Comment puis-je ajouter à la collection?
Vous devez vous connecter pour publier un commentaire.
Pas la suppression, mais la création d'un nouveau
List
sans cet élément avec LINQ:remove
est incorrect. Vous devez mettre à jour votre question à préciser que.Vous ne pouvez pas supprimer un élément à partir d'un
IEnumerable
; il ne peut être énumérés, comme décrit ici:http://msdn.microsoft.com/en-us/library/system.collections.ienumerable.aspx
Vous devez utiliser un
ICollection
si vous voulez ajouter et supprimer des éléments. Peut-être que vous pouvez essayer et le moulage de votreIEnumerable
; ce sera bien sûr ne fonctionne que si l'objet sous-jacent implémente ICollection`.Voir ici pour en savoir plus sur
ICollection
:http://msdn.microsoft.com/en-us/library/92t2ye13.aspx
Vous pouvez, bien sûr, il suffit de créer une nouvelle liste à partir de votre IEnumerable, comme l'a souligné lante, mais c'est peut-être "sous-optimale", selon votre cas d'utilisation, bien sûr.
ICollection
est probablement la voie à suivre.Essayez de tourner le
IEnumerable
dans unList
. À partir de ce point, vous serez en mesure d'utiliserList
'sRemove
méthode pour supprimer des éléments.À passer en tant que paramètre à la
Remove
méthode à l'aide de Linq, vous pouvez obtenir l'élément par les méthodes suivantes:users.Single(x => x.userId == 1123)
users.First(x => x.userId == 1123)
Le code est comme suit:
Vous ne pouvez pas.
IEnumerable<T>
ne peut être itérée.Dans votre deuxième exemple, vous pouvez supprimer de la collection originale par itération sur une copie
La
IEnumerable
interface est juste que, énumérable - il ne propose pas de méthodes pourAdd
ouRemove
ou de modifier la liste à tous.L'interface fournit un moyen pour effectuer une itération sur certains éléments - la plupart des implémentations qui nécessitent une énumération mettra en œuvre
IEnumerable
commeList<T>
Pourquoi ne pas simplement utiliser votre code sans le cast implicite de
IEnumerable
List<T>
à une méthode qui attend unIEnumerable<T>
depuisList<T>
dérive deIEnumerable<T>
. Je ne pense pas que vous avez besoin d'un cast en raison de la covariance des règles.Vous ne pouvez pas supprimer
IEnumerable<T>
éléments, mais vous pouvez utiliser le Énumérable.Méthode SkipIl y a maintenant une méthode d'extension pour convertir le
IEnumerable<>
à unDictionary<,>
qui aRemove
méthode.