我有一個字符串變量,表示自定義類的名稱。例如:將字符串轉換爲類名稱
string s = "Customer";
我需要創建客戶的數組列表。所以,需要的語法是:
List<Customer> cust = new ..
如何將字符串s轉換爲能夠在運行時創建此數組列表?
我有一個字符串變量,表示自定義類的名稱。例如:將字符串轉換爲類名稱
string s = "Customer";
我需要創建客戶的數組列表。所以,需要的語法是:
List<Customer> cust = new ..
如何將字符串s轉換爲能夠在運行時創建此數組列表?
那麼,對於一件事ArrayList
是不是通用的......你的意思是List<Customer>
?
您可以使用Type.GetType(string)
通過名稱獲取與類型關聯的對象Type
。如果程序集不是mscorlib或當前正在執行的類型,則需要包含程序集名稱。無論哪種方式,你也需要命名空間。
你確定你確實需要泛型類型嗎?泛型通常提供編譯時間類型安全性,如果在執行時發現類型,顯然你不會有太多的東西。您可以發現它很有用,但...
Type elementType = Type.GetType("Customer");
Type listType = typeof(List<>).MakeGenericType(new Type[] { elementType });
object list = Activator.CreateInstance(listType);
如果你需要做任何與列表中,你可能需要做更多的普通反射,但...例如調用通用方法。
如何將對象轉換爲具體類型?我試過使用List
這是一個反思問題。你需要找到的類型,然後實例化它的一個實例,是這樣的:
Type hai = Type.GetType(classString,true);
Object o = (Activator.CreateInstance(hai)); //Or you could cast here if you already knew the type somehow
,或者的CreateInstance(的AssemblyName,類名)
您將需要雖然注意命名空間/類型的衝突,但這將爲一個簡單的場景做訣竅。
另外,在try/catch中包裝! Activator.CreateInstance是可怕的!
John,.NET框架中沒有ArrayList類的通用實現。 Bob,這個問題已經超出了範圍,但是如果你使用C#2.0+進行編程,你應該用ArrayList替代通用的東西。 – senfo 2009-01-29 23:12:47