我想创建一个我在通用方法中指定的类型的实例。此类型具有许多重载的构造函数。我希望能够将参数传递给构造函数,但是
Activator.CreateInstance<T>()
并不认为这是一种选择。
还有其他办法吗?
答案 0 :(得分:387)
(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个呼叫所花费的时间(以毫秒为单位)。
答案 4 :(得分:0)
\1