Скажем, у меня есть скользящая коллекция значений, в которой я указываю размер коллекции, и каждый раз, когда добавляется новое значение, все старые значения, превышающие указанный размер, отбрасываются. Очевидно (и я проверял это) лучшим типом коллекции для этого поведения является Очередь:
myQueue.Enqueue(newValue)
If myQueue.Count > specifiedSize Then myQueue.Dequeue()
Однако, что если я хочу вычислить разницу между первым и последним элементами в очереди? Очевидно, я не могу получить доступ к элементам по индексу. Но переключение с очереди на что-то, реализующее IList, кажется излишним, равно как и написание нового класса, похожего на очередь. Прямо сейчас у меня есть:
Dim firstValue As Integer = myQueue.Peek()
Dim lastValue As Integer = myQueue.ToArray()(myQueue.Count - 1)
Dim diff As Integer = lastValue - firstValue
Этот призыв к ToArray()
беспокоит меня, но лучшая альтернатива мне не подходит. Есть предложения?