限制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。