我有一个反映的类型,最终是一个List< Type>.所以我有:
Type modelType = GetMyType();
所以 – modelType可以是List< ClassA>或者列出< ClassB>等取决于具体情况.
如何创建此类型,然后填充它?
我知道我可以这样做:
var myList = Activator.CreateInstance(modelType);
但是我如何添加项目,我通常会使用myList.Add(new ClassA())或myList.Add(new ClassB())知道我不知道ClassA或ClassB类型 – 我只知道modelType是List< ClassA> – 是否有其他方法我应该实例化它,以便我可以添加项目?
最佳答案 看看这个例子,它使用
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 { }