Search code examples
c#generic-collections

Limit the size of a generic collection?


Is there any way to limit the size of a generic collection?

I have a Stack of WriteableBitmap which I am using to store a clone of a WriteableBitmap on each change, meaning that I can undo easily by simply Popping the most recent WriteableBitmap off the stack.

The problem is the memory usage, I want to limit this stack to hold 10 objects, but I can't see a property allowing me to easily do this. Is there a way, or am I going to have to check the stack size on each change, and copy the last 10 objects into a new stack whenever I hit 10, and on each subsequent change? I know how to do this, but was hoping that there was an easier way, is there?


Solution

  • You have to implement your own wrapper to achieve that. There is no direct option available.

    class FixedSizeStack : Stack
    {
        private int MaxNumber;
        public FixedSizeStack(int Limit)
            : base()
        {
            MaxNumber = Limit;
        }
    
        public override void Push(object obj)
        {
            if (this.Count < MaxNumber)
                base.Push(obj);
        }
    
    }