首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Func<out TResult>如何返回Func<out TResult>?

Func<out TResult>如何返回Func<out TResult>?
EN

Stack Overflow用户
提问于 2012-07-08 03:09:16
回答 2查看 214关注 0票数 3

我正在尝试一个撤消-重做实现,我希望堆栈上的撤消或重做项包含对某个Func<out TResult>的引用,其中TResult本身就是一个Func<TResult>。要点是,当从撤消堆栈调用Func时,返回值将存储在重做堆栈中(反之亦然)。

我不确定是否可以做到这一点,因此这个问题。

正如你在这里看到的,我能想到的最好的方法是不起作用的:

代码语言:javascript
复制
struct UndoRedoItem
{
    public Func<Func<Func<Func<Func<Func<......>>>>>> UndoOrRedoFunc;
    public string Description;
    ... 
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-07-08 03:17:59

正如您已经发现的,让undo Func直接返回redo Func并不起作用,因为所需的类型参数将无限增长。你需要做的是引入一定程度的间接性,例如,让撤销函数返回要放在重做堆栈上的UndoRedoItem,而不仅仅是重做函数:

代码语言:javascript
复制
struct UndoRedoItem
{
    public Func<UndoRedoItem> UndoOrRedoFunc;
    public string Description;
    ... 
}
票数 3
EN

Stack Overflow用户

发布于 2012-07-08 03:38:13

您应该研究命令模式,以实现您想要的功能。

一个命令封装了执行某个任务所需的所有信息。因此,很容易撤消或重做它(可能会占用一些未封装在Command对象中的状态)

这里有一些关于这方面的链接:

Command pattern for undo / redo

Multilevel Undo / Redo in C#

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11377881

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档