你的方法是慢,因为它遍历整个集合三次,因为你做删除操作也付出了代价(的"O(n),其中n为(计数-索引)",根据MSDN).
您可以通过调用FindIndex(int, predicate)
重载来避开这两种情况,int
在迭代源集合时会谴责起始位置.
所以要替换出现这种情况的地方:
myCollection.RemoveAt(index); index = myCollection.FindIndex(predicate);
有了这个:
index = myCollection.FindIndex(index + 1, predicate)