构造一个通用对象(不是默认构造函数)

Sma*_*ery 8 c# generics constructor

我想从泛型方法中构造一个对象.该对象采用string其构造函数.像这样的东西:

public T GetObject<T>()
{
    return new T("Hello");
}
Run Code Online (Sandbox Code Playgroud)

这可能吗?

dtb*_*dtb 11

是的,但只是在没有编译时检查构造函数是否真的存在:Activator.CreateInstance

public T GetObject<T>()
{
    return (T)Activator.CreateInstance(typeof(T), "Hello");
}
Run Code Online (Sandbox Code Playgroud)


Jar*_*Par 7

一种选择是重写它以强制调用者传入工厂方法/ lambda

public T GetObject<T>(Func<string,T> func) 
{ 
  return func("Hello");
} 
Run Code Online (Sandbox Code Playgroud)

呼叫站点将被修改为如下所示

GetObject(x => new T(x));
Run Code Online (Sandbox Code Playgroud)