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

C泛型方法,并从XML返回在方法中创建的参数化类型的对象

  •  4
  • theringostarrs  · 技术社区  · 15 年前

    我有一个方法,我想在其中返回参数化类型t ie的对象实例。 Foo<T> .

    类型t在方法中使用 GetType() ,来自XML文件中的字符串元素。因为类或方法在创建之前都不知道它,所以我也不能参数化。

    有什么方法可以返回类型的对象吗 FO & T; 从非泛型方法?

    编辑:这是一个方法签名,例如:

     public Foo<T> getFooFromXml(string name) {
    

    在其中创建类型,并且方法和类都是非泛型的?

    2 回复  |  直到 15 年前
        1
  •  1
  •   Josh    15 年前

    根据您的编辑:

    该方法签名无论如何无效。为了从一个方法返回foo,您需要在编译时知道t。在我最后一个答案的注释中考虑我的建议,在这里您将拥有一个FOO实现的独立接口ifoo。

    class Foo<T> : IFoo {
    
       public T DoSomething() {
           ...
       }
    
       object IFoo.DoSomething() {
          return DoSomething();
       }
    
    }
    
    interface IFoo {
       object DoSomething();
    }
    
        2
  •  8
  •   Josh    15 年前

    是的,基本上,您必须获得开放的泛型类型并创建一个封闭的泛型类型。

    Type openType = typeof(Foo<>);
    Type closedType = openType.MakeGenericType(typeof(string));
    
    return Activator.CreateInstance(closedType); // returns a new Foo<string>
    

    编辑:请注意,我使用了上面的typeof(foo<>),我故意将尖括号留空。