簡體   English   中英

C# 中可以使用哪種類型簽名來記憶泛型方法?

[英]Which type signature can be used to memoize a generic method in C#?

我有一個備忘錄 function 'Memo' 並且我想將通用方法 'Foo' 作為委托傳遞給它,我可以使用哪種類型的簽名來實現這一點?

public static class Program
{

    private static Func<int, int> Foo(int n)
    {
        return (int x) =>
        {
            if (n <= 2) return x;
            return Foo(n - 1)(1) + Foo(n - 2)(1);
        };
    } 

    private static Func<A, B> Memo<A, B>(Func<A, B> f)
    {
    var cache = new Dictionary<A, B>();
        return (A a) =>
    {
        if (cache.ContainsKey(a))
        {
            return cache[a];
        }
        var b = f(a);
        cache[a] = b;
        return b;
    }; 
}

方法可以隱式轉換為與其簽名匹配的Action / Func ,因此您可以這樣做:

Func<int, Func<int, int>> foo = Foo;
Memo(foo);

現在foo有了類型,可以推斷出Memo的通用 arguments。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM