c# - 当反射类型本身是 List 时实例化通用 c# List

标签 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())知道我真的不知道ClassAClassB type - 我只知道 modelType 是 List<ClassA> - 有没有其他方法可以实例化它,以便我可以向其中添加项目?

最佳答案

看看这个例子,它使用了 Type.GetGenericArguments Method检索列表内部类型。然后像往常一样进行反射(reflection)。

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

关于c# - 当反射类型本身是 List 时实例化通用 c# List,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30658289/

相关文章:

c# - 在原始文本字符串中查找链接

jquery - HTML:如何根据容器大小更改输入字段的宽度

asp.net - 如何获取RadioButtonList的innerText

c# - 通过反射获取列表

c# - MVC 4 动态操作方法参数

c# - 提交时 ViewModel 属性为空

c# - 如何以及在何处为简单 XAML 窗口中的转换器创建 StaticResource 键?

asp.net - 如何使用 jQuery 从 ASP.NET 服务器控件传递值?

python - 将查询集的内容添加到 Django/Python 中的列表

python - 2D Numpy 数组到 Numpy 数组列表