当反射类型本身是List

时间:2015-06-05 04:20:25

标签: c# asp.net list generics reflection

我有一个反映的类型,最终是List<Type>。所以我有:

Type modelType = GetMyType();

所以 - modelType可以是List<ClassA>List<ClassB>等,视情况而定。

如何创建此类型,然后填充它?

我知道我可以这样做:

var myList = Activator.CreateInstance(modelType);

但是我如何添加项目,我通常会使用myList.Add(new ClassA())myList.Add(new ClassB())知道我不知道ClassA或{{1} } type - 我只知道modelType是ClassB - 是否有其他方法我应该实例化它以便我可以添加项目?

1 个答案:

答案 0 :(得分:2)

看看这个例子,它使用Type.GetGenericArguments Method来检索列表内部类型。然后照常进行反思。

    static void Main(string[] args)
    {
        Type modelType = GetMyType();
        var myList = Activator.CreateInstance(modelType);

        var listInnerType = modelType.GetGenericArguments()[0];
        var listInnerTypeObject = Activator.CreateInstance(listInnerType);

        var addMethod = modelType.GetMethod("Add");
        addMethod.Invoke(myList, new[] { listInnerTypeObject });
    }
    static Type GetMyType()
    {
        return typeof(List<>).MakeGenericType((new Random().Next(2) == 0) ? typeof(A) : typeof(B));
    }

class A { }
class B { }