我正在玩一个undo-redo实现,我希望它的堆栈上的撤消或重做项目能够引用某些Func<out TResult>
TResult
本身就是Func<TResult>
1}}。关键是当从撤销堆栈调用Func
时,返回值将存储在重做堆栈上(反之亦然)。
我不确定是否可以这样做。
我能想到的最好的东西不会像你在这里看到的那样工作:
struct UndoRedoItem
{
public Func<Func<Func<Func<Func<Func<......>>>>>> UndoOrRedoFunc;
public string Description;
...
}
答案 0 :(得分:3)
正如您所发现的,让撤消Func直接返回重做Func不起作用,因为所需的类型参数将无限增长。你需要做的是引入一个间接级别,例如,通过让undo Func返回UndoRedoItem来放置在重做堆栈而不仅仅是重做Func:
struct UndoRedoItem
{
public Func<UndoRedoItem> UndoOrRedoFunc;
public string Description;
...
}
答案 1 :(得分:3)
您应该调查命令模式以实现您想要的效果。
一个命令封装了执行特定任务的所有信息。 因此很容易撤消或重做它(也许有一些开销 保持未封装在Command对象中的状态)
以下是一些链接: