有没有一种方法可以创建通用Action或Func

本文关键字:创建 Action Func 方法 一种 有没有 | 更新日期: 2023-09-27 18:27:50

我能做这样的事情吗:

Action<T> mapComponentFields<T> = (T arg) =>
    {
        // TODO
    };
int arg = 10;
mapComponentFields<int>(arg)

有没有一种方法可以创建通用Action或Func

不是这样的,但可以编写一个返回委托的泛型方法:

static Action<T> MapField<T>()
{
    // This will use Console.WriteLine(object) of course...
    return arg => Console.WriteLine(arg);
}
...
MapField<int>()(10);

作为另一个例子,您可以创建一个返回身份函数的方法:

static Func<T, T> Identity<T>()
{
    return value => value;
}

但任何时候调用它,都必须在执行时有一个具体类型。因此,您可以从已经定义了类型参数的泛型类型调用它:

public class Sample<TFoo>
{
    static void Test()
    {
        Func<TFoo, TFoo> identity = Helpers.Identity<TFoo>();
    }
}

但是,您不能像在问题中试图做的那样,只在方法中声明类型参数