限制generics集合的大小?

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

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

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

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

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

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

  public class LimitedSizeStack : LinkedList { 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; } } 

您可以使用表示双向链接列表的LinkedList来模拟循环堆栈 。

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

对于Pop()您可以使用RemoveFirst()

你将不得不检查大小(你会得到一个例外我相信如果你设置了一个限制,并且不检查它是否已满)。

编辑

如果已设置大小,则不会出现exception,但大小会增加,因此您必须检查大小(通过http://msdn.microsoft.com/en-us/library/6335ax0f.aspx ): –

如果Count已经等于容量,则通过自动重新分配内部数组来增加堆栈的容量,并在添加新元素之前将现有元素复制到新arrays。