在代码变量中创建泛型类型

时间:2015-05-14 15:42:16

标签: c# generics

我想创建一个容器类,其工作方式类似于一种目录,但具有多个键,并且可以为一个键分配多个值。可能的键数应该是可变的。我想通过为inputTypes中的每个key-Type创建一个新的Dictionary来实现这一点,该Dictionary包含键和值列表中值的索引。

    class SampleContainer<Tvalue>
    { 
      public SampleContainer(params Type[]inputTypes)
      {
          foreach(Type t in inputTypes)
          {
             ls.Add(new Dictionary(t,int));//won't compile 
          }
          values=new List<Tvalue>();
      }
       List<Dictionary< ???,int>> ls;/*object as ??? doesn't work,
                                       what to fill in to keep it "generic"*/
       List<Tvalue>values;
    }

1 个答案:

答案 0 :(得分:1)

尝试

        List<IDictionary> ls = new List<IDictionary>();
        ls.Add(typeof(Dictionary<,>).MakeGenericType(typeof(int), typeof(bool))
                                    .GetConstructor(Type.EmptyTypes)
                                    .Invoke(null) as IDictionary);

虽然存在副作用,IDictionary接口使用object键/值对。它在尝试检索值时也可能导致装箱(因为它返回对象类型)。

也许有人可以想出一个非常简洁的方法去做并保持强力打字,但这是我能想到的最接近你想要做的事情。