Ich suche nach einer eleganten Möglichkeit, Instanzen aus einer Liste entfernen, deren Property einem bestimmten Wert entspricht.
Also bspw. aus einer Liste von Personen alle Personen entfernen, die den Vorname "Max" haben.
Meine Lösung mit C#-Code ist zu kompliziert:
Ich lege eine neue Liste an, in der ich die zu entfernenen Instanzen nach Identifikation zwischenspeichere. Danach entferne ich mithilfe dieser Liste die Instanzen aus der Ursprungsliste. Bei C# kann man die Liste nicht verändern, die man durch-iteriert.
Gibt es evtl. eine elegante Lösung mit LINQ?
Hallo,
Bei C# kann man die Liste nicht verändern, die man durch-iteriert.
Bei einer Foreach-Schleife ist das richtig.
Aber du kannst auch eine for-Schleife verwenden dann ist das kein Problem.
Du musst nur den Index um 1 verkleinern wenn du ein Element entfernst, weil sonst würdest du ein Element überspringen.
Einfacher ist es natürlich mit LINQ (wie marsgk) dir beschrieben hat.
Aber einfacher zu verstehen ist wohl die Variante mit der for-schleife 😃
Gruss
Michael
Aber du kannst auch eine for-Schleife verwenden dann ist das kein Problem.
Du musst nur den Index um 1 verkleinern wenn du ein Element entfernst, weil sonst würdest du ein Element überspringen.
Schon richtig, aber an den Laufvariablen rumspielen halt ich für schlechten Stil, wenn mein Programmieren Prof. sowas sieht gibt's immer was auf die Lauscher 😉
using System;class H{static string z(char[]c){string r="";for(int x=0;x<(677%666);x++)r+=c[
x];return r;}static void Main(){int[]c={798,218,229,592,232,274,813,585,229,842,275};char[]
b=new char[11];for(int p=0;p<((59%12));p++)b[p]=(char)(c[p]%121);Console.WriteLine(z(b));}}
Einfacher ist es natürlich mit LINQ (wie marsgk) dir beschrieben hat.
Aber einfacher zu verstehen ist wohl die Variante mit der for-schleife 😃
List<T>.RemoveAll hat nichts mit LINQ zu tun. RemoveAll ist eine normale Methode der List<T> Klasse.
Ich persönlich finde den Einzeiler RemoveAll wesentlich sprechender, als eine for-Schleife.
Du musst nur den Index um 1 verkleinern wenn du ein Element entfernst, weil sonst würdest du ein Element überspringen.
Du kannst die Liste einfach Rückwärts durch iterieren, dann brauchst du den index nicht zu manipulieren.
Again what learned...
Hallo
List<T>.RemoveAll hat nichts mit LINQ zu tun. RemoveAll ist eine normale Methode der List<T> Klasse.
Ehm ja, da hast du wohl recht 😃
Ich dachte es ist eine der Extension Methods
Ich persönlich finde den Einzeiler RemoveAll wesentlich sprechender, als eine for-Schleife.
Ich finde es schon auch so leserlicher, aber da er schon mit der Schleife Probleme hatte hab ich mir gedacht dass es etwas einfacher ist wenn man es so macht und nicht gleich diese mächtige Variante verwendet.
Aber das kann er dann machen wie er will.
@freundblase: Guck mal hier: List<T>.RemoveAll-Methode
Grüsse
Hallo freundblase,
bitte immer erst in die FAQ schauen: [FAQ] Auflistungs-Elemente suchen und entfernen
herbivore
Vielen Dank!
RemoveAll kann man, wie auch Exists und Find, LINQ-Syntax übergeben:
list.RemoveAll(l => l.id == 5);