泛型类型的通用集合

时间:2014-08-22 05:16:22

标签: c# .net generics

我想知道什么是最好的方法 要解决这个问题:

object GetCollection(T1, T2) 
{
    return new T1<T2>;
}

嗯,我知道这不会编译,但它说明了我的观点。 我需要根据传递给T1的泛型类型创建一个集合类型,它应该包含类型为T2的元素

Aby的想法? 提前致谢

3 个答案:

答案 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)));
}