¿Hay una mejor manera de implementar un método Quitar para una cola?

En primer lugar, solo concedo que, de hecho, quiero la funcionalidad de unQueue<T> - FIFO, generalmente solo necesito.Enqueue/Dequeue, etc. - y entonces preferiría una respuesta que no sea "Lo que realmente quieres es unaList<T>" (Se acerca deRemoveAt).

Por ejemplo, digamos que tengo unQueue<DataPoint> dataToProcess de los puntos de datos que deben procesarse en el orden en que llegaron. Luego periódicamente tendría sentido tener un código como este:

while (dataToProcess.Count > 0) {
    DataPoint pointToProcess = dataToProcess.Dequeue();
    ProcessDataPoint(pointToProcess);
}

Pero supongamos que, por cualquier motivo, se descubre que un punto de datos particular que se ha agregado a la cola deberíano estar procesado. Entonces sería ideal si hubiera un método análogo a:

dataToProcess.Remove(badPoint);

Entiendo que realmente no hay manera posible de tener unaRemove Método que no involucra alguna forma de enumeración; sin embargo, desde unQueue<T> realmente no te deja entrar y eliminar algún elemento al azar, la única solución que pude averiguar fue esta:

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;
}

¿Es esto ridículo? Ciertamentemiradas malo, pero realmente no puedo ver una mejor manera, aparte de escribir una clase personalizada. E incluso así, la mejor manera en que podría pensar para implementar unRemove método sería utilizar unLinkedList<T> internamente.

Respuestas a la pregunta(5)

Su respuesta a la pregunta