2

我可以做这样的事情:

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

int arg = 10;
mapComponentFields<int>(arg)
4

1 回答 1

8

不是这样 - 但您可以编写一个返回委托的通用方法:

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>();
    }
}

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

于 2013-08-15T07:11:46.760 回答