Ограничить размер очереди <T> в .NET?

Я бы порекомендовал вам открыть collections C5 Library. В отличие от SCG (System.Collections.Generic), C5 dotnet запрограммирован на интерфейс dotnet и предназначен для создания .net-framework подклассов. Большинство общедоступных java-collections-api методов являются виртуальными, и collection ни один из классов не запечатан. Таким collections образом, вам не придется collection использовать это неприятное dotnet "новое" ключевое collection слово, которое не сработает, если .net-framework ваш LimitedQueue будет преобразован в dot-net SCG.Queue. При использовании C5 и dotnet использовании того же кода, что collection и раньше, вы должны унаследовать java-collections-api от CircularQueue. CircularQueue фактически реализует collection как стек, так и очередь, поэтому collections вы можете получить оба варианта .net-framework с ограничением почти бесплатно. Я dot-net переписал его ниже с помощью collection некоторых конструкций 3.5:

using C5;

public class LimitedQueue : CircularQueue
{
    public int Limit { get; set; }

    public LimitedQueue(int limit) : base(limit)
    {
        this.Limit = limit;
    }

    public override void Push(T item)
    {
        CheckLimit(false);
        base.Push(item);
    }

    public override void Enqueue(T item)
    {
        CheckLimit(true);
        base.Enqueue(item);
    }

    protected virtual void CheckLimit(bool enqueue)
    {
        while (this.Count >= this.Limit)
        {
            if (enqueue)
            {
                this.Dequeue();
            }
            else
            {
                this.Pop();
            }
        }
    }
}

Я dotnet думаю, что этот код должен .net делать именно то, что вы .net-framework искали.

.net

collections

queue

2022-09-28T18:07:17+00:00