我有一个通用类,如下所示
public class MyClass<T>
{
public T MyProp { get; set; }
}
现在我想返回该类型的实例,其类型参数在运行时确定,如下所示
public MyClass<object> ReturnWithDynamicParameterType()
{
//This function determines the type of T at runtime and should return instance of MyClass<T>
}
如何实现这一点
你想做的是不可能。虽然您可以在运行时为任意泛型类型参数创建泛型类型,如下所示
public MyClass<object> ReturnWithDynamicParameterType(Type genericArgument)
{
Type genericType = typeof(MyClass<>).MakeGenericType(genericArgument);
return (MyClass<object>)Activator.CreateInstance(genericType);
}
this return
线总是会抛出一个InvalidCastException
。正如李已经评论过的那样,类是不变的。这意味着例如MyClass<object>
and MyClass<string>
只是不是同一类型。他们是甚至没有继承来自彼此。
即使协方差也无济于事,因为out
类中的泛型参数不允许使用关键字。
如果不知道编译时的类型,我看不到解决方案。但我相信你能解决你的问题actually试图通过其他方法来实现。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)