繁体   English   中英

C#:递归泛型

[英]C#: Recursive Generics

是否可以在 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# 不允许这样做。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM