我想知道什么是最好的方法 要解决这个问题:
object GetCollection(T1, T2)
{
return new T1<T2>;
}
嗯,我知道这不会编译,但它说明了我的观点。 我需要根据传递给T1的泛型类型创建一个集合类型,它应该包含类型为T2的元素
Aby的想法? 提前致谢
答案 0 :(得分:0)
你可以通过反思来做到这一点。否则,我会建议根据T1的列表使用接口。 像这样:
class GenericContainerOne<T> { }
class GenericContainerTwo<T> { }
class Construct { }
static void Main(string[] args)
{
GenericContainerOne<Construct> returnObject = (GenericContainerOne<Construct>)GetGenericObject(typeof(GenericContainerOne<>), typeof(Construct));
}
static object GetGenericObject(Type container, Type construct)
{
Type genericType = container.MakeGenericType(construct);
return Activator.CreateInstance(genericType);
}
答案 1 :(得分:0)
你的意思是这样吗?
object GetCollection<T1, T2>() where T1 : IEnumerable<T2>, new()
{
return new T1();
}
如果您在编译时不知道类型,那么您需要将泛型类型与反射绑定。 This Microsoft article may cover your needs.
答案 2 :(得分:0)
最简单的是:
object GetCollection<T1, T2>()
{
return Activator.CreateInstance(typeof(T1).MakeGenericType(typeof(T2)));
}