c# - Func<out TResult> 如何返回 Func<out TResult>?

标签 c# .net generics

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

我不确定是否可以因此提出这个问题。

我能想到的最好的方法都行不通,正如您在此处看到的那样:

struct UndoRedoItem
{
    public Func<Func<Func<Func<Func<Func<......>>>>>> UndoOrRedoFunc;
    public string Description;
    ... 
}

最佳答案

正如您所发现的,让撤消 Func 直接返回重做 Func 是行不通的,因为所需的类型参数会无限增长。您需要做的是引入一个间接级别,例如,通过让撤消 Func 返回要放置在重做堆栈上的 UndoRedoItem 而不仅仅是重做 Func:

struct UndoRedoItem
{
    public Func<UndoRedoItem> UndoOrRedoFunc;
    public string Description;
    ... 
}

关于c# - Func<out TResult> 如何返回 Func<out TResult>?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11377881/

相关文章:

c# - Python for .NET - 删除 DLL 引用

c# - 当单词以方括号等特殊字符开头或结尾时,单词边界不匹配

c# - 将 C# 结构编码到 native C 库中

.net - 导出到 Excel 不适用于 Excel 2013

java - 为什么 Class<T extends Base> 不适用于 Class<Base>?

c# - AppDomain.CurrentDomain.GetData ("DataDirectory") 总是返回 Null

c# - 将两个 mp3 音频文件合并为一个

.net - SQLHelper 类

Java泛型在基类中初始化子类

c# - 通过 MessageCollection 填充列表对象的智能方法