获取通用容器类型

时间:2011-08-15 08:47:58

标签: c# reflection

我需要查明我正在使用的Type是否为Generic'容器',例如,如果我有List<int>我需要检查我是否正在使用List (我知道如何使用int),我该怎么做? (我在想反思)。另一个例子,我有一个名为StructContainer<T>的类,我需要找到单词(name)'StructContainer',我不太喜欢'T',使用反射得到StructContainer'1,不愿意做一些字符串拆分等/编辑:只是为了进一步解释,StructContainer<int>我需要'StructContainer',Tuple<int>我需要'元组',List<int>我需要'列表'等等

2 个答案:

答案 0 :(得分:4)

您的第一个问题可以通过多种方式实现:

  1. 检查您的对象是否实现了IEnumerable<T>yourObject is IEnumerable<int>。这仅在您知道容器中对象的类型(在这种情况下为int
  2. 时才有效
  3. 使用我在下面描述的相同解决方案,只需将StructContainer更改为List
  4. 至于你的第二个问题,你可以这样做:

    var yourObject = new StructContainer<int>();
    var yourType = yourObject.GetType();
    if(yourType.IsGenericType &&
       yourType.GetGenericTypeDefinition() == typeof(StructContainer<>))
        // ...
    

答案 1 :(得分:0)

string type = yourObject.GetType().Name.Split('`')[0];