Ограничить размер очереди <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
Ограничить размер очереди <T> в .NET?
Мы используем файлы cookies для улучшения работы сайта. Оставаясь на нашем сайте, вы соглашаетесь с условиями использования файлов cookies. Чтобы ознакомиться с нашими Положениями о конфиденциальности и об использовании файлов cookie, нажмите здесь.