Entfernen Sie ein Element aus einer IEnumerable<T> Sammlung
Ich habe eine popuplated IEnumerable<User>
Sammlung.
Möchte ich entfernen Sie ein Element aus, wie kann ich dies tun?
foreach(var u in users)
{
if(u.userId = 1123)
{
//remove!
}
}
Ich weiß, dass Ihr nicht angenommen zu entfernen, während looping, so habe ich nichts dagegen die Schaffung einer neuen Sammlung oder entfernen Sie es nach.
Aber ich weiß nicht, wie um ein Element zu entfernen, irgendwie verloren aus irgendeinem Grund auf dieser!
Abwechselnd das ich verwirrt bin ebenfalls, wie kann ich eine neue Sammlung erstellen, wie:
IEnumerable<User> modifiedUsers = new List<User>();
foreach(var u in users)
{
if(u.userId != 1233)
{
modifiedUsers.add ??????
}
}
Wie kann ich zu der Auflistung hinzufügen?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nicht die Beseitigung, sondern die Schaffung einer neuen
List
ohne dass element mit LINQ:remove
ist falsch. Aktualisieren Sie Ihre Frage zu klären.Können Sie nicht entfernen Sie ein Element aus einer
IEnumerable
; es kann nur aufgelistet werden, wie hier beschrieben:http://msdn.microsoft.com/en-us/library/system.collections.ienumerable.aspx
Müssen Sie eine
ICollection
wenn Sie möchten, hinzufügen und entfernen von Elementen. Vielleicht können Sie versuchen, und Gießen Sie IhreIEnumerable
; dies wird natürlich nur funktionieren, wenn das zugrunde liegende Objekt implementiert ICollection`.Siehe hier für weitere Informationen über
ICollection
:http://msdn.microsoft.com/en-us/library/92t2ye13.aspx
Können Sie, natürlich, erstellen Sie einfach eine neue Liste, aus der IEnumerable, wie bereits von lante, aber vielleicht "suboptimal", abhängig von Ihrer tatsächlichen Anwendungsfall, natürlich.
ICollection
ist wahrscheinlich der Weg zu gehen.Versuchen Sie, die
IEnumerable
in eineList
. Von diesem Punkt an werden Sie in der Lage sein zu verwendenList
'sRemove
Methode, um Elemente zu entfernen.Zu übergeben Sie es als Parameter an die
Remove
Methode mithilfe von Linq können Sie die Artikel durch die folgenden Methoden:users.Single(x => x.userId == 1123)
users.First(x => x.userId == 1123)
Der code ist wie folgt:
Können Sie nicht.
IEnumerable<T>
kann nur Durchlaufen werden.In Ihrem zweiten Beispiel, können Sie entfernen von der ursprünglichen Sammlung durch iterieren über eine Kopie der
Den
IEnumerable
- Schnittstelle ist nur, dass enumerable - es bietet keine Methoden, umAdd
oderRemove
oder ändern Sie die Liste an alle.Die Schnittstelle bietet nur eine Möglichkeit zur Iteration über einige Gegenstände - die meisten Implementierungen erfordern enumeration implementieren
IEnumerable
wieList<T>
Warum verwenden Sie nicht nur Ihren code, ohne den impliziten cast zu
IEnumerable
List<T>
um eine Methode, die in der Erwartung einerIEnumerable<T>
seitList<T>
stammt ausIEnumerable<T>
. Ich glaube nicht einmal, Sie brauchen eine Besetzung durch Kovarianz-Regeln.Können Sie nicht entfernen
IEnumerable<T>
Elemente, aber Sie können die Enumerable.Skip-MethodeGibt es jetzt eine Erweiterung Methode zum konvertieren der
IEnumerable<>
zu einemDictionary<,>
die hat dann eineRemove
Methode.