Action中的泛型类型?

A B*_*ife 2 c#

Action构造是通用的,但它可以支持泛型类型吗?

下面显示的代码片段就是我想要实现的.

我知道还有其他方法可以做到,但我很好奇它是否可以在Action构造中实现.

void SomeMethod()
{
    Action<int> Initialize = //<T> and where T is all that stuff
    (index) =>
    {
        T obj = new T();
        obj.Initialize(index);
        obj.DoWork();
    };

    Initialize<TypeA>(1);
    Initialize<TypeB>(2);
}
Run Code Online (Sandbox Code Playgroud)

Mar*_*ell 5

不,基本上 - 或者至少,不在单个实例中Action- 单个实例在泛型方面本质上是封闭的.显然你可以使用常规的泛型方法Initialize<T>.如果您需要单个Action,那么可能需要将类型作为参数:

Action<Type, int> init = (type, index) => {
    ISomeInterface obj = (ISomeInterface)Activator.CreateInstance(type);
    obj.Initialize();
    obj.DoWork();
};
init(typeof(TypeA), 1);
init(typeof(TypeB), 2);
Run Code Online (Sandbox Code Playgroud)

除此以外:

void Initialize<T>(int index) where T : new(), ISomeInterface {
    T obj = new T();
    obj.Initialize();
    obj.DoWork();
}
void SomeMethod() {
    Initialize<TypeA>(1);
    Initialize<TypeB>(2);
}
Run Code Online (Sandbox Code Playgroud)

您可以创建Action<int>委托代表分开 Initialize<TypeA>(int),并Initialize<TypeB>(int)在同一时间,但不能同时,并没有开放Initialize<T>(int).