我有一个方法,我想返回参数化类型T ie的对象实例。 Foo<T>
。C#泛型方法并返回从xml方法中创建的参数化类型的对象
类型T在方法中使用GetType()
从XML文件中的字符串元素实例化。既然类或方法在它被创建之前都不知道,我也不能参数化。
有没有办法可以从非泛型方法返回Foo<T>
类型的对象?
编辑:这是一个方法的签名,例如:
public Foo<T> getFooFromXml(string name) {
其中类型是内部产生,并且该方法和类都是非一般的?
我有一个方法,我想返回参数化类型T ie的对象实例。 Foo<T>
。C#泛型方法并返回从xml方法中创建的参数化类型的对象
类型T在方法中使用GetType()
从XML文件中的字符串元素实例化。既然类或方法在它被创建之前都不知道,我也不能参数化。
有没有办法可以从非泛型方法返回Foo<T>
类型的对象?
编辑:这是一个方法的签名,例如:
public Foo<T> getFooFromXml(string name) {
其中类型是内部产生,并且该方法和类都是非一般的?
回复您的编辑:
该方法签名无论如何都是无效的。您需要在编译时知道T才能从方法返回Foo。在我的最后一个答案的评论中考虑我的建议,你将拥有一个Foo实现的单独界面IFoo。
class Foo<T> : IFoo {
public T DoSomething() {
...
}
object IFoo.DoSomething() {
return DoSomething();
}
}
interface IFoo {
object DoSomething();
}
是的,基本上你必须得到开放的泛型类型并创建一个封闭泛型类型。
Type openType = typeof(Foo<>);
Type closedType = openType.MakeGenericType(typeof(string));
return Activator.CreateInstance(closedType); // returns a new Foo<string>
编辑:请注意,我的typeof使用(美孚<>)中,我故意留下尖括号空。
很好的编辑 - 我看到很多人被(很少见的)开放式语法困惑。 – 2009-05-28 04:26:59
您可能需要用GetType(typeName)替换typeof(string); – Randolpho 2009-05-28 04:27:33