Jeśli można konwertować do korzystania Lista <> zamiast LinkedList <> następnie można użyć removeAll() operacji. Przeprowadź anonimowego delegata w ten sposób;
List<string> list = new List<string>()
{
"Fred","Joe","John"
};
list.RemoveAll((string val) =>
{
return (0 == val.CompareTo("Fred"));
});
Wszystko to używa rozszerzeń Linq.
Jeśli nie można przekonwertować na listę, można użyć metody ToList <>(), aby ją przekonwertować. Będziesz jednak musiał wykonać pewne jasne operacje wstawiania. Lubię to;
LinkedList<string> str = new LinkedList<string>();
str.AddLast("Fred");
str.AddLast("Joe");
str.AddLast("John");
List<string> ls = str.ToList();
ls.RemoveAll((string val) => val.CompareTo("Fred") == 0);
str.Clear();
ls.ForEach((string val) => str.AddLast(val));
Jeśli to wszystko nadal nie jest smaczne, spróbuj wykonać kopię listy typu LinkedList w ten sposób;
LinkedList<string> str = new LinkedList<string>();
str.AddLast("Fred");
str.AddLast("Joe");
str.AddLast("John");
LinkedList<string> strCopy = new LinkedList<string>(str);
str.Clear();
foreach (var val in strCopy)
{
if (0 != val.CompareTo("Fred"))
{
str.AddLast(val);
}
}
Mam nadzieję, że to pomaga.
porządku, myślę, że mam zrobić myCollection.Remove (it.Value) zamiast. –
zmienili moje imię: możesz po prostu zrobić myCollection.Remove (it) - Remove ma przeciążenie, które ma 'LinkedListNode' - nie musisz wyciągać wartości. –
itowlson
Ucieczka do takiej kolekcji wydaje się wymagać dużego nakładu zasobów. Jeśli wiesz, że sekwencja logiki węzłów sugeruje, że możesz to zrobić bardziej efektywnie, mówiąc poprzedniemu węzłowi, aby zmienił swój węzeł na następny węzeł bieżącego węzła. Powiedz to dziesięć razy szybko. – Oli