我有一个反射类型,它最终是一个 List<Type>
.所以我有:
Type modelType = GetMyType();
所以 - modelType
可能是 List<ClassA>
或 List<ClassB>
等视情况而定。
如何创建此类型,然后填充它?
我知道我可以做到:
var myList = Activator.CreateInstance(modelType);
但是我该如何向它添加项目,我通常会用 myList.Add(new ClassA())
来做或 myList.Add(new ClassB())
知道我真的不知道ClassA
或 ClassB
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/