2016-04-28 20 views
0

我有這樣的代碼片段:使用typeof我的泛型類型參數

foreach (var item in allClassesINeedList) 
{ 
    var genericMethod = temp.GetType().GetMethod("GenerateDocument").MakeGenericMethod(typeof(item)); 
    genericMethod.Invoke(temp, new object[] { item }); 
} 

這將引發一個錯誤:

"The type or namespace name 'item' could not be found (are you missing a using directive or an assembly reference?)"

我的目標是在allClassesINeedList執行爲每個對象(它的一個List<object>)我的通用方法GenerateSingleDocument與該列表中的每個對象。

我做錯了什麼?

回答

3

可以取代typeof(item)item.GetType()

+0

擴展 - 「typeof」僅適用於編譯時已知編譯器的類型,例如, 'typeof運算(IDisposable接口)'。要找到一個對象的類型,使用'GetType()'。 – yaakov

1

你需要使用反射?如果你有對正在迭代的類的控制,最好創建一個接口。反思緩慢,應儘可能避免。

public interface IDocumentCreator 
{ 
    void GenerateDocument(); 
} 

這個接口添加到您的類:

public class YourClass : IDocumentCreator 
{ 
    // ... 

    public void GenerateDocument() 
    { 
     // ... 
    } 
} 

然後做的,而不是List<IDocumentCreator>List<object>。然後您可以以正常方式調用該方法:

List<IDocumentCreator> allClassesINeedList = ... 
foreach(IDocumentCreator item in allClassesINeedList) 
{ 
    item.GenerateDocument(); 
} 
+0

我喜歡你的方法,但在我的情況下,我必須使用重感,但thxs :) – kkkk00999