当反射类型本身是List时,实例化泛型c# List



我有一个反射类型,它最终是一个List<Type>。输入:

Type modelType = GetMyType();

因此- modelType可以是List<ClassA>List<ClassB>,依情况而定。

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

我知道我可以这样做:

var myList = Activator.CreateInstance(modelType);

但是,我如何添加项目到它,我通常会做myList.Add(new ClassA())myList.Add(new ClassB())知道我不知道ClassAClassB类型-我只知道modelType是List<ClassA> -是否有一些其他的方式我应该实例化它,以便我可以添加项目到它?

看一下这个例子,它使用了Type。GetGenericArguments方法来检索列表的内部类型。然后像往常一样进行反思。

    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 { }

相关内容

  • 没有找到相关文章

最新更新