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

时间:2010-11-22 23:59:44

标签: c# generics constructor

我想从泛型方法中构造一个对象。该对象在其构造函数中使用string。像这样:

public T GetObject<T>()
{
    return new T("Hello");
}

这可能吗?

3 个答案:

答案 0 :(得分:11)

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

public T GetObject<T>()
{
    return (T)Activator.CreateInstance(typeof(T), "Hello");
}

答案 1 :(得分:7)

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

public T GetObject<T>(Func<string,T> func) 
{ 
  return func("Hello");
} 

调用网站将被修改为如下所示

GetObject(x => new T(x));

答案 2 :(得分:0)

没有。目前,您不能将参数化构造函数与泛型类型一起使用,因为您无法在其中定义它们。

使用Activator是不一样的 - 我认为不是你问题的答案 - 但你当然可以使用它。