2010-03-16 68 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