有没有办法创建通用的Action或Func

Don*_*ato 2 c# generics

我可以这样做:

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

int arg = 10;
mapComponentFields<int>(arg)
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 7

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

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

...

MapField<int>()(10);
Run Code Online (Sandbox Code Playgroud)

作为另一个示例,您可以创建一个返回标识函数的方法:

static Func<T, T> Identity<T>()
{
    return value => value;
}
Run Code Online (Sandbox Code Playgroud)

但是每当调用它时,执行时必须有一个具体的类型.因此,您可以从已定义类型参数的泛型类型中调用它:

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

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