从我之前提出的问题来看,这RemoveAll是从List<>一个条件中删除的最简洁的方法.很想知道从a中删除的最佳方法LinkedList是什么,因为那里没有任何RemoveAll功能.
List<ItemClass> itemsToErase = new List<ItemClass>();
foreach(ItemClass itm in DS)
{
if(itm.ToBeRemoved)
itemsToErase .Add(itm);
}
foreach(ItemClass eraseItem in itemsToErase)
{
DS.Remove(eraseItem );
}
Run Code Online (Sandbox Code Playgroud)
编辑:DS是类型 LinkedList<ItemClass>
dtb*_*dtb 25
虽然不能从删除节点链表<T>同时用迭代它foreach,则可以手动迭代链表<T>通过遵循接着每个属性一个LinkedListNode <T> .在删除节点之前,请记住该节点的下一个节点:
var list = new LinkedList<int>(Enumerable.Range(0, 10));
var node = list.First;
while (node != null)
{
var next = node.Next;
if (node.Value % 2 == 0)
list.Remove(node);
node = next;
}
Run Code Online (Sandbox Code Playgroud)
扩展方法:
public static int RemoveAll<T>(this LinkedList<T> list, Predicate<T> match)
{
if (list == null)
{
throw new ArgumentNullException("list");
}
if (match == null)
{
throw new ArgumentNullException("match");
}
var count = 0;
var node = list.First;
while (node != null)
{
var next = node.Next;
if (match(node.Value))
{
list.Remove(node);
count++;
}
node = next;
}
return count;
}
Run Code Online (Sandbox Code Playgroud)
用法:
LinkedList<ItemClass> DS = ...
DS.RemoveAll(itm => itm.ToBeRemoved);
Run Code Online (Sandbox Code Playgroud)
另请参阅:扩展方法(C#编程指南)