代码之家  ›  专栏  ›  技术社区  ›  Smashery

构造泛型对象(不是默认构造函数)

  •  8
  • Smashery  · 技术社区  · 14 年前

    我想从泛型方法中构造一个对象。这个对象需要 string 在它的构造器中。像这样的:

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

    这可能吗?

    3 回复  |  直到 14 年前
        1
  •  7
  •   JaredPar    14 年前

    一个选项是重写它,以强制调用方传入一个工厂方法/lambda

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

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

    GetObject(x => new T(x));
    
        2
  •  11
  •   dtb    14 年前

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

    public T GetObject<T>()
    {
        return (T)Activator.CreateInstance(typeof(T), "Hello");
    }
    
        3
  •  0
  •   Aliostad    14 年前

    不可以。目前不能将参数化构造函数与泛型类型一起使用,因为不能在where中定义它们。

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