2014-10-31 46 views
2

动作构造是通用的,但它可以支持泛型类型吗?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); 
} 

回答

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

否则:

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

您可以创建Action<int>代表分别代表Initialize<TypeA>(int)Initialize<TypeB>(int) ,但不是在同一时间,也不是开放的Initialize<T>(int)