限制泛型集合的大小?

JMK*_*JMK 7 c# generic-collections

有没有办法限制泛型集合的大小?

我有一个StackableBitmap堆栈,我用它来存储每个更改的WriteableBitmap克隆,这意味着我可以通过简单地从堆栈弹出最近的WriteableBitmap来轻松撤消.

问题是内存使用情况,我想限制这个堆栈来容纳10个对象,但我看不到允许我轻松执行此操作的属性.有没有办法,或者我将不得不检查每次更改的堆栈大小,并在每次点击10时将最后10个对象复制到新堆栈中,并在每次后续更改时复制?我知道怎么做,但希望有一种更简单的方法,是吗?

Oli*_*ver 21

详细说明Tilak的答案是一些示例代码:

  public class LimitedSizeStack<T> : LinkedList<T>
  {
    private readonly int _maxSize;
    public LimitedSizeStack(int maxSize)
    {
      _maxSize = maxSize;
    }

    public void Push(T item)
    {
      this.AddFirst(item);

      if(this.Count > _maxSize)
        this.RemoveLast();
    }

    public T Pop()
    {
      var item = this.First.Value;
      this.RemoveFirst();
      return item;
    }
  }
Run Code Online (Sandbox Code Playgroud)


Hab*_*bib 7

您必须实现自己的包装器才能实现这一目标.没有直接的选择.

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);
    }

}
Run Code Online (Sandbox Code Playgroud)


Til*_*lak 5

您可以使用代表双向链表的LinkedList来模拟循环堆栈

你可以AddFirst()对应到Push(). 如果Count为 10,则可以使用RemoveLast().

Pop()您可以使用RemoveFirst()