有没有办法限制泛型集合的大小?
我有一个WriteableBitmap堆栈,我用它来存储每次更改时WriteableBitmap的克隆,这意味着我可以通过简单地从堆栈中弹出最近的WriteableBitmap来轻松撤消。
问题是内存使用情况,我想限制此堆栈以容纳10个对象,但我看不到允许我轻松执行此操作的属性。有没有办法,或者我将不得不检查每次更改的堆栈大小,并在每次点击10时将最后10个对象复制到新堆栈中,并在每次后续更改时复制?我知道怎么做,但是希望有一种更简单的方法,是吗?
答案 0 :(得分: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;
}
}
答案 1 :(得分:6)
您必须实现自己的包装器才能实现这一目标。没有直接的选择。
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);
}
}
答案 2 :(得分:3)
您可以使用代表双重链接列表的LinkedList来模拟Circular Stack。
你可以AddFirst()
对应Push()
。如果Count为10,则可以使用RemoveLast()
。
对于Pop()
,您可以使用RemoveFirst()
答案 3 :(得分:1)
你必须检查大小(你会得到一个例外,我相信如果你设置一个限制,并且不检查它是否已满)。
修改
如果已设置尺寸,则不会出现异常,但尺寸会增加,因此您必须检查尺寸(通过http://msdn.microsoft.com/en-us/library/6335ax0f.aspx): -
如果Count已经等于容量,则堆栈的容量为 通过自动重新分配内部数组来增加 现有元素在新元素之前复制到新数组 已添加。