在 C# 中返回与自身具有相同签名的函数

Returning a function with the same signature as itself in C#

在我的应用程序中,我想要一个函数,在完成一些工作后,return 一个与其自身具有相同签名的函数,或者为 null: 请注意,这里没有任何泛型,因为所有类型都是“静态”的(如泛型的反义词)

//type is not a C# keyword, but bear with me
type RecursiveType = Func<int, RecursiveType>;
RecursiveType currentStep; //something not null
var i = 0;
while (currentStep != null) {
    currentStep = currentStep(i);
    i += 1;
}

"currentStep" 类似于(这是一个例子。在实际情况下 Foo::A 执行一些逻辑来决定它将执行哪个函数 return,可能是也可能不是它自己)

class Foo {
    public static RecursiveType fun(int x) {
        if (x < 3) { 
            return Foo.A
        }
        else {
            return null;
        }
    }
}

这在 C# 中可行吗?

您可以像这样声明委托类型:

public delegate RecursiveType RecursiveType(int x);

然后这将编译:

RecursiveType currentStep = Foo.fun(1);
var i = 0;
while (currentStep != null)
{
    currentStep = currentStep(i);
    i += 1;
}

委托表示接受 int 和 returns 具有相同签名的函数的函数。