Я быстро взглянул на документы .NET и не смог найти ничего, что могло бы выполнить его так, как вам нужно. Похоже, вам нужно реализовать это самостоятельно, хотя это не так уж сложно. Я рекомендую использовать массив соответствующего размера, хранить индексы чтения и записи для текущей позиции в массиве и использовать его как круговой массив.
Enqueue будет записывать значение в readIndex, а затем устанавливать readIndex в ((readIndex + 1)% queueSize). Dequeue выдаст исключение, если readIndex == writeIndex, в противном случае получить значение в writeIndex, а затем увеличить writeIndex на ((writeIndex + 1)% queueSize). Если заглянуть в индекс очереди (из верхней части очереди, то есть элемента, который был поставлен в очередь последним), он будет возвращать элемент в ((queueSize + (readIndex - index))% queueSize).