我正在尝试一个撤消-重做实现,我希望堆栈上的撤消或重做项包含对某个Func<out TResult>的引用,其中TResult本身就是一个Func<TResult>。要点是,当从撤消堆栈调用Func时,返回值将存储在重做堆栈中(反之亦然)。
我不确定是否可以做到这一点,因此这个问题。
正如你在这里看到的,我能想到的最好的方法是不起作用的:
struct UndoRedoItem
{
public Func<Func<Func<Func<Func<Func<......>>>>>> UndoOrRedoFunc;
public string Description;
...
}发布于 2012-07-08 03:17:59
正如您已经发现的,让undo Func直接返回redo Func并不起作用,因为所需的类型参数将无限增长。你需要做的是引入一定程度的间接性,例如,让撤销函数返回要放在重做堆栈上的UndoRedoItem,而不仅仅是重做函数:
struct UndoRedoItem
{
public Func<UndoRedoItem> UndoOrRedoFunc;
public string Description;
...
}发布于 2012-07-08 03:38:13
您应该研究命令模式,以实现您想要的功能。
一个命令封装了执行某个任务所需的所有信息。因此,很容易撤消或重做它(可能会占用一些未封装在Command对象中的状态)
这里有一些关于这方面的链接:
Command pattern for undo / redo
Multilevel Undo / Redo in C#
https://stackoverflow.com/questions/11377881
复制相似问题