这是我想要得到的
- (IList<Foo>)listPropertyInfo.GetValue(item)
这是我如何获得Foo类型
- listPropertyInfo.GetValue(item).GetType().GenericTypeArguments[0]
这是我试过但不能成功的
- Convert.ChangeType(listPropertyInfo.GetValue(item),IList<listPropertyInfo.GetValue(item).GetType().GenericTypeArguments[0]>)
这也是
- ((typeof(IList<>).MakeGenericType(listPropertyInfo.GetValue(item).GetType().GenericTypeArguments.Single())))(listPropertyInfo.GetValue(item))
这是我试图实现的方法
- public static void trigger(IList<T> result)
- {
- foreach (var item in result)
- {
- foreach (var listPropertyInfo in typeof(T).GetProperties().ToList().FindAll(x => x.PropertyType.Name == typeof(IList<>).Name))
- {
- trigger((IList<Foo>)listPropertyInfo.GetValue(item));
- }
- }
- }
解决方法
我这样解决了
- IList targetList = (IList)listPropertyInfo.GetValue(item);
- Type foo = targetList.GetType().GenericTypeArguments.Single();
- Type unboundGenericType = typeof(READ<>);
- Type boundGenericType = unboundGenericType.MakeGenericType(foo);
- MethodInfo doSomethingMethod = boundGenericType.GetMethod("trigger");
- object instance = Activator.CreateInstance(boundGenericType);
- doSomethingMethod.Invoke(instance,new object[] { targetList,f,properties });