C#中的泛型 - 如何使用参数创建变量类型的实例?

Rom*_*man 77 c# generics

我有一个泛型类,我想用泛型类型实例化一个对象.我想为类型的构造函数使用一个参数.

我的代码:

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

我得到了一个错误

new T(some_param)
Run Code Online (Sandbox Code Playgroud)

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

任何想法我怎么能这样做?

Gra*_*mas 117

看看Activator.CreateInstance.例如:

var instance = Activator.CreateInstance(typeof(T), new object[] { null, null });
Run Code Online (Sandbox Code Playgroud)

显然,用null一个类型的构造函数所期望的适当值替换s.

如果收到编译器错误cannot convert object to type T,请包括as T:

var instance = Activator.CreateInstance(typeof(T), 
                  new object[] { null, null }) as T;
Run Code Online (Sandbox Code Playgroud)

  • 注意`var instance = Activator.CreateInstance(typeof(T),new object [] {null,null})中的`as T`为T;` (9认同)
  • 这只有在T不是值类型时才有效.例如,如果你需要将它与SystemNumerics.Complex一起使用,这是一个结构,然后转换为(T)而不是使用'as T' (4认同)