是否有可能在C#中定义递归泛型?或更具体的说:可以将此代码(TypeScript)翻译成C#吗?
type U<T> = (a: U<T>) => T;
function f<T>(a: U<T>): T {
return a(a)
}
function g<T>(a: T): boolean {
return false
}
console.log(f(g))
U<T>
类型在其定义中使用自己。
谢谢
如果我正确理解了TypeScript,则可能是C#中最接近的等效项:
delegate T U<T>(U<T> a);
static void Main() {
T f<T>(U<T> a) => a(a);
bool g<T>(T a) => false;
Console.WriteLine(f<bool>(g));
}
我们必须明确地为f
提供一个类型,因为必须进行委托转换,并且编译器不会自动执行该转换。如果使g
成为实际的委托实例而不是局部函数,则可以避免这种情况,尽管该解决方案缺乏对称性:
static void Main() {
T f<T>(U<T> a) => a(a);
U<bool> g = a => false;
Console.WriteLine(f(g));
}
我们不能直接使f
成为委托,因为我们必须将通用参数保持打开状态,而C#不允许。