如何将参数传递给Activator.CreateInstance <t>()</t>

时间:2010-03-16 00:07:08

标签: c# generics createinstance

我想创建一个我在通用方法中指定的类型的实例。此类型具有许多重载的构造函数。我希望能够将参数传递给构造函数,但是

Activator.CreateInstance<T>()

并不认为这是一种选择。

还有其他办法吗?

5 个答案:

答案 0 :(得分:387)

Yes.

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

答案 1 :(得分:13)

还有另一种方法可以通过命名参数将参数传递给CreateInstance。

基于此,您可以将数组传递给CreateInstance。这将允许您有0个或多个参数。

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

答案 2 :(得分:6)

作为Activator.CreateInstance的替代方案,链接网址中的FastObjectFactory比Activator更好(从.NET 4.0开始,明显优于.NET 3.5。没有使用.NET 4.5进行测试/统计)。有关统计信息,信息和代码,请参阅StackOverflow帖子:

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

答案 3 :(得分:4)

请记住,尽管在Activator.CreateInstance上传递参数与无参数创建相比有明显的性能差异。

有更好的替代方法,可以使用预编译的lambda动态创建对象。当然,性能总是主观的,并且显然取决于每种情况是否值得。

Details about the issue on this article.

图摘自本文,它表示每1000个呼叫所花费的时间(以毫秒为单位)。

Performance comparison

答案 4 :(得分:0)

\1