2010-03-16 66 views
161

我想創建一個我在我有的泛型方法中指定的類型的實例。這種類型有許多重載的構造函數。我希望能夠將參數傳遞給構造函數,但是如何將參數傳遞給Activator.CreateInstance <T>()

Activator.CreateInstance<T>() 

看不到此選項。

有沒有另一種方法呢?

+3

的可能重複[Activator.CreateInstance - 如何創建有參數的構造函數的類的實例(http://stackoverflow.com/questions/1288310/activator-createinstance-how-to-create-instances-有類參數) – nawfal 2013-04-23 07:53:19

回答

306

Yes.

(T)Activator.CreateInstance(typeof(T), param1, param2); 
6

正如所鏈接的URL瓶坯比激活更好(作爲.NET 4.0和.NET比3.5,與沒有進行測試/統計顯著更好的替代方法Activator.CreateInstance,FastObjectFactory。 NET 4.5)。見StackOverflow的職位統計,信息和代碼:

How to pass ctor args in Activator.CreateInstance or use IL?

+0

你的意思是說,當你傳遞參數時,有一種可能比Activator.CreateInstance更好的替代解決方案(鏈接)?或者這在所有情況下都可能表現更好? – 2014-01-20 22:28:24

+1

我在一段時間內沒有做過性能測試,看起來有人發佈了.NET 4.0統計,但是對於.NET 4.0來說,它看起來像FastObjectFactory有更好的性能。 Activator.CreateInstance在.NET 3.5中很糟糕,並且在.NET 4.0中速度明顯更快,但仍然比在該URL中鏈接的FastObjectFactory慢。 – thames 2014-01-20 22:37:47

8

還有另一種方式來傳遞參數通過命名參數的CreateInstance。基於此,您可以向CreateInstance傳遞數組。這將允許你有0或多個參數。

public void CreateInstance<T>(params object[] paramArray) 
{ 
    (T)Activator.CreateInstance(typeof(T), args:paramArray); 
} 
+2

這看起來不完整,當然你需要返回一個T類型的對象而不是無效的對象? (T)Activator.CreateInstance(typeof(T),args:paramArray);返回(T)Activator.CreateInstance(typeof(T),args:paramArray);}} } – wlf 2017-05-06 10:51:50