首先,假设我确实需要
例如,假设我有一个数据点队列
Queue<T>
的功能——先进先出,通常只需要 Enqueue
/ Dequeue
等操作。因此,我希望得到的回答不是“你真正需要的是 List<T>
”(我知道有 RemoveAt
方法)。例如,假设我有一个数据点队列
Queue<DataPoint> dataToProcess
,需要按照它们到达的顺序进行处理。然后,周期性地执行以下代码是有意义的:while (dataToProcess.Count > 0) {
DataPoint pointToProcess = dataToProcess.Dequeue();
ProcessDataPoint(pointToProcess);
}
但是假设由于某种原因,发现将添加到队列中的特定数据点不应被处理。那么最好有一种类似于以下方法的方法:
dataToProcess.Remove(badPoint);
我知道没有可行的方法可以实现一个不涉及枚举的Remove
方法;但是,由于Queue<T>
并不能让你随意删除某个项目,所以我能想到的唯一解决方案是:
bool Remove(T item) {
bool itemFound = false;
// set up a temporary queue to take items out
// one by one
Queue<T> receivingQueue = new Queue<T>();
// move all non-matching items out into the
// temporary queue
while (this.Count > 0) {
T next = this.Dequeue();
if (next.Equals(item)) {
itemFound = true;
} else {
receivingQueue.Enqueue(next);
}
}
// return the items back into the original
// queue
while (receivingQueue.Count > 0) {
this.Enqueue(receivingQueue.Dequeue());
}
return itemFound;
}
这很荒谬吗?看起来确实不好,但我想除了编写自定义类之外,没有更好的方法。即使是这样,我所能想到的最好的实现“Remove”方法的方式是在内部使用 LinkedList<T>
。