2011-06-20 29 views
54

我有一个泛型类,我想用泛型类型实例化一个对象。我想为该类型的构造函数使用参数。C#中的泛型 - 我如何创建一个带有参数的变量类型的实例?

我的代码:

public class GenericClass<T> where T : Some_Base_Class, new() 
{ 
    public static T SomeFunction(string s) 
    { 
     if (String.IsNullOrEmpty(s)) 
      return new T(some_param); 
    } 
} 

我上

new T(some_param) 

'T' 的错误:创建变量 类型的实例时无法提供参数

任何想法如何我可以这样做吗?

+0

你会做这样频繁?什么版本的C#? –

+0

[this](http://stackoverflow.com/questions/840261/c-generic-new-constructor-problem/840299#840299)是我已经能够找到的最佳解决方法.... –

+0

另一种方法是在'Some_Base_Class'上创建一个公共属性,然后你可以执行以下操作:'new T(){SomeProperty =“value”}' – nZeus

回答

85

看看Activator.CreateInstance。例如:

var instance = Activator.CreateInstance(typeof(T), new object[] { null, null }); 

显然与由该类型的构造函数之一预期适当的值替换null秒。

如果您收到有关cannot convert object to type T编译器错误,那么包括as T

var instance = Activator.CreateInstance(typeof(T), 
        new object[] { null, null }) as T; 
+0

这是正确的方法。 –

+0

完美!非常感谢! :) – Roman

+0

这将工作得很好,虽然它很慢并且不是一个很好的选择,如果您必须多次构建相同的对象类型。 –

相关问题