2009-05-28 85 views
4

我有一个方法,我想返回参数化类型T ie的对象实例。 Foo<T>C#泛型方法并返回从xml方法中创建的参数化类型的对象

类型T在方法中使用GetType()从XML文件中的字符串元素实例化。既然类或方法在它被创建之前都不知道,我也不能参数化。

有没有办法可以从非泛型方法返回Foo<T>类型的对象?

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

public Foo<T> getFooFromXml(string name) { 

其中类型是内部产生,并且该方法和类都是非一般的?

回答

1

回复您的编辑:

该方法签名无论如何都是无效的。您需要在编译时知道T才能从方法返回Foo。在我的最后一个答案的评论中考虑我的建议,你将拥有一个Foo实现的单独界面IFoo。

class Foo<T> : IFoo { 

    public T DoSomething() { 
     ... 
    } 

    object IFoo.DoSomething() { 
     return DoSomething(); 
    } 

} 

interface IFoo { 
    object DoSomething(); 
} 
8

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

Type openType = typeof(Foo<>); 
Type closedType = openType.MakeGenericType(typeof(string)); 

return Activator.CreateInstance(closedType); // returns a new Foo<string> 

编辑:请注意,我的typeof使用(美孚<>)中,我故意留下尖括号空。

+1

很好的编辑 - 我看到很多人被(很少见的)开放式语法困惑。 – 2009-05-28 04:26:59

+0

您可能需要用GetType(typeName)替换typeof(string); – Randolpho 2009-05-28 04:27:33