The
Queue<T>
class would be a natural fit here, if it would only automatically dequeue when it reached it's limit!
But...It's easy to do:
public class FixedQueue<T> : Queue<T>
{
private int _fixedSize = int.MinValue;
public int FixedSize
{
get { return _fixedSize; }
set
{
while (value < _fixedSize && Count > value)
{
Dequeue();
}
_fixedSize = value;
}
}
public FixedQueue(int fixedSize)
: base(fixedSize)
{
_fixedSize = fixedSize;
}
public new void Enqueue(T item)
{
if (Count >= FixedSize)
{
Dequeue();
}
base.Enqueue(item);
}
}