C# 想要下一个堆栈<;T>;从操作列表中

C# 想要下一个堆栈<;T>;从操作列表中,c#,wpf,stack,undo-redo,C#,Wpf,Stack,Undo Redo,我正在为我的应用程序创建一个撤消重做功能。现在,在函数DoAction中,我有了在堆栈中执行的操作列表现在,我想得到最后一个执行的操作,它将自动成为列表中的第一个,以删除我使用过的列表中的第一个actionList.Peek()现在出现的情况是,下次我想从列表中选择第二个。我不知道该怎么做 private void DoAction(Stack<UndoRedoAction> actionList, Stack<UndoRedoAction> storeList, Act

我正在为我的应用程序创建一个撤消重做功能。现在,在函数
DoAction
中,我有了在
堆栈中执行的操作列表
现在,我想得到最后一个执行的操作,它将自动成为列表中的第一个,以删除我使用过的列表中的第一个
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);
    }
}
private void DoAction(堆栈操作列表、堆栈存储列表、操作)
{
如果(actionList.Count>0)
{
UndoRedoAction urAction=actionList.Peek();
行动(行动);
storeList.Push(urAction);
}
}
您需要使用而不是
Peek
Pop
删除堆栈中最后添加的项并返回它,而
Peek
返回最后添加的项而不将其从堆栈中删除

一定要使用Pop(如@Matias)所说


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

我从未想过这一点。让我试试:)傻我。创建流时,我意识到我想删除第一个流,这就是我在
storeList
中添加当前操作的原因,也是因为重做的原因。但是我忘了。谢谢你的
Pop
为我工作。