C# 返回与C中的函数具有相同签名的函数#
在我的应用程序中,我需要一个函数,在完成一些工作后,返回一个与自身签名相同的函数,或者为null: 请注意,这里没有泛型,因为所有类型都是“静态的”(如中,泛型的反面)C# 返回与C中的函数具有相同签名的函数#,c#,types,recursive-datastructures,C#,Types,Recursive Datastructures,在我的应用程序中,我需要一个函数,在完成一些工作后,返回一个与自身签名相同的函数,或者为null: 请注意,这里没有泛型,因为所有类型都是“静态的”(如中,泛型的反面) //type不是一个C#关键字,但请记住 类型RecursiveType=Func; 递归型currentStep//非空的东西 var i=0; while(currentStep!=null){ 当前步骤=当前步骤(i); i+=1; } “currentStep”类似于(这是一个示例。在实际情况中,Foo::A执行一些逻
//type不是一个C#关键字,但请记住
类型RecursiveType=Func;
递归型currentStep//非空的东西
var i=0;
while(currentStep!=null){
当前步骤=当前步骤(i);
i+=1;
}
“currentStep”类似于(这是一个示例。在实际情况中,Foo::A执行一些逻辑来决定它将返回哪个函数,可能是它自己,也可能不是它自己)
class-Foo{
公共静态递归类型fun(int x){
如果(x<3){
返回Foo.A
}
否则{
返回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
,并返回一个具有相同签名的函数。缺少新的:返回新的Foo.a(){set values};Foo.A不是一个类,它是一个函数(属于类A),所以我不能“新建”它。总是有一个int
类型的参数吗?或者参数是变量吗?总是一个int
参数。递归类型在.NET的类型系统中不是一个东西。您可以得到的最接近的方法是在继承或约束子句中使用类型“as-others”(classc:IEquatable
),但这不能用于模拟这一点(除非非常笨拙,使用具有调用方法或类似方法的IFunc
)。当然,您可以通过使用object
或dynamic
或与强制转换前返回类型相同的非承诺性内容,以非类型安全的方式实现这一点。您还可以将其封装在一个类中,这样可以自行返回。你就是不能用通用的Func
来做这件事。我忘了递归委托类型是一种东西。这与方法组转换(以及其他委托转换)相结合,允许您或多或少地直接执行此操作(return Foo.fun
insideFoo.fun
),也可以使用@JeroenMostert Yes,或者假设Foo.A
也接受int
并返回RecursiveType
,如操作建议的那样。
public delegate RecursiveType RecursiveType(int x);
RecursiveType currentStep = Foo.fun(1);
var i = 0;
while (currentStep != null)
{
currentStep = currentStep(i);
i += 1;
}