这是我想要得到的
(IList<Foo>)listPropertyInfo.GetValue(item)@H_404_4@这是我如何获得Foo类型
listPropertyInfo.GetValue(item).GetType().GenericTypeArguments[0]@H_404_4@这是我试过但不能成功的
Convert.ChangeType(listPropertyInfo.GetValue(item),IList<listPropertyInfo.GetValue(item).GetType().GenericTypeArguments[0]>)@H_404_4@这也是
((typeof(IList<>).MakeGenericType(listPropertyInfo.GetValue(item).GetType().GenericTypeArguments.Single())))(listPropertyInfo.GetValue(item))@H_404_4@这是我试图实现的方法
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 });