2014-10-31 48 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)