在 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 具有相同签名的函数的函数。
在我的应用程序中,我想要一个函数,在完成一些工作后,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 具有相同签名的函数的函数。