【发布时间】:2019-03-14 18:45:52
【问题描述】:
是否有限制 System.Collection.Generics.Stack 深度的内置方法?所以如果你处于最大容量,推送一个新元素会移除堆栈的底部?
我知道我可以通过转换为数组并重建堆栈来做到这一点,但我想可能已经有一个方法了。
编辑:我写了一个扩展方法:
public static void Trim<T> (this Stack<T> stack, int trimCount)
{
if (stack.Count <= trimCount)
return;
stack = new
Stack<T>
(
stack
.ToArray()
.Take(trimCount)
);
}
因此,它在修剪时返回一个新堆栈,但功能方式不是不变性 =)
原因是我将应用程序的撤消步骤存储在堆栈中,而我只想存储有限数量的步骤。
【问题讨论】:
-
如果你实现你的行为,这不是一个真正的堆栈。可以说更正确的行为是抛出异常或(在并发系统中)阻塞直到空间可用(假设当前线程不是唯一推入堆栈的线程)。
-
我的第一个想法是,您这样做并没有帮助您的用户。
-
杰伊,详细点?您将如何存储深度受限的撤消信息?