想要下一个堆栈从动作列表中

本文关键字:列表 下一个 堆栈 | 更新日期: 2023-09-27 18:09:52

我正在为我的应用程序制作撤消重做功能。现在在函数 DoAction 上,我有 Stack<UndoRedoAction> 中所采取的行动列表。现在我想获得最后采取的行动,该行动将自动成为列表中的第一个。为了取出列表中的第一个,我使用了 actionList.Peek(); 。现在出现的情况是,下次我想从列表中取出第二个。我不知道该怎么做

private void DoAction(Stack<UndoRedoAction> actionList, Stack<UndoRedoAction> storeList, Action<UndoRedoAction> action)
{
    if (actionList.Count > 0)
    {
        UndoRedoAction urAction = actionList.Peek();
        action(urAction);
        storeList.Push(urAction);
    }
}

想要下一个堆栈<T>从动作列表中

您需要使用Stack<T>.Pop而不是PeekPop删除堆栈中最后添加的项并返回它,而Peek返回最后添加的项而不从堆栈中删除它。

一定要用Pop(就像@Matias说的)

还可以查看命令模式,因为它非常适合在实际工作的代码之间进行抽象,并为撤消提供了很好的基础。