2016-11-28 18 views
0

我在尋找一類的字符串名稱轉換爲一類,然後傳遞類名到接受<T>的方法:字符串轉換爲類的名稱,並通過作爲參數T

var objectList = _reader.GetObjects<MyClassName>(); 

和我打電話的方法是:

public List<T> GetObjects<T>() where T:new() { 

} 

你知道這個怎麼辦?我已經試過:

var type = Type.GetType(MyClassName); 
var yourObject = Activator.CreateInstance(type); 

var objectList = _reader.GetObjects<yourObject>(); 

,但不工作,我得到的錯誤信息「yourObject是一個變量,但像使用類型爲」

它的工作,如果我用一個實際的類名。

任何想法?

回答

-2

.NET通用語法<T>已在編譯時解析,因此您無法直接執行您想要的操作。如果你沒有你的讀者級的控制,那麼你可以使用反射調用它爲How do I use reflection to call a generic method?

描述然而,如果你正在寫的讀取器類的話,我喜歡做這樣的事情:

public List<T> GetObjects<T>() where T : class 
{ 
    return GetObjects(typeof(T)).Cast<T>(); 
} 

public List GetObjects(Type type) 
{ 
    ... 
} 

現在,如果你只有在運行時的字符串,就可以調用第二種形式是這樣的:

var objectList = _reader.GetObjects(Type.GetType(MyClassName)); 

當然,這是假設你在你的「讀者」級控制。

+0

絕對可以通過反射調用泛型方法。 – Rob

+0

我更新了帖子以反映使用反射的可能性。我認爲如果OP能夠控制讀者類別,我的答案就很有價值。 –

相關問題