如何通过反射制作带有样本元素类型的列表类型?

时间:2014-09-05 09:29:26

标签: c# generics reflection

我需要定义一种对象,我从服务中接受。服务有不同的命名空间,但是同一个对象,所以我写了一些解析器来获取收到的类型的名称。 但我有一些麻烦来检测嵌套列表类型,如

    List<List<SomeObjectType>> 
or
    List<List<Tuple<int,int,SomeObjectType>> 

所以在我的递归函数中,我需要创建一个带有样本元素类型的列表类型。像这样:

public Type getType(TypeSpec TypeInfo, string NameSpace)
{
    Type foundType = ObjectsHelper.ByName(NameSpace + "." + nameOfType);
    if (foundType == null) throw new TypeNotFoundException(TypeInfo.name);
    else
    {
        if (TypeInfo.generic_params != null && TypeInfo.generic_params.Count > 0) // if has generic params, run recursive
        {
            var listOfParams = new List<Type>();
            foreach (var gp in generic_params)
            {
                listOfParams.Add(this.getType(gp, NameSpace));
            }
            // here is a heart of the matter
            HowToAddGenericParameters(foundType, listOfParams); // ????
        }
        return foundType;
    }
}

有可能吗? =)

1 个答案:

答案 0 :(得分:2)

您似乎正在寻找MakeGenericType方法

foundType.MakeGenericType(listOfParams.ToArray());