2011-10-31 24 views
3

我有一個類:從一個配置文件使用一個字符串,用來初始化一個泛型類型

public class MyClass<T> 

我有我讀了,比方說,Guid該類型T一個配置文件。

如何做到這一點,除了使用字符串從配置文件,而不是實際的類型(而不是硬編碼Guid)?

MyClass<Guid> = new MyClass<Guid>(); 
+0

你是用'而不是硬編碼Guid'表示的意思嗎? – sll

+0

這沒有任何意義。你爲什麼想這樣做?如果類型參數是動態的,那麼使用泛型來促進參數化*靜態*輸入沒有意義。 –

+0

你是在一個奇怪的局面:當你有直接與生成的類型進行交互。 (我假設生成名稱爲GUID的類型。) –

回答

2

您需要完全限定的類型名稱:

var typeArgument = Type.GetType("System.Guid"); 

然後你可以使用反射來獲取的參數化類型:

var genericType = typeof(MyClass<>).MakeGenericType(typeArgument); 

然後你就可以通過實例:

var instance = Activator.CreateInstance(genericType); 

但我不是確定你爲什麼要這樣做,或者爲什麼它會在你的情況下有用。由於使用這種技術,你將永遠無法與MyClass<T>其中T被定義爲你在編譯時指定內容進行交互時,你失去了大部分的在第一時間使用泛型的優勢。

相關問題