簡體   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