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

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

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

.net

collections

queue

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