这就是我想要的
(IList<Foo>)listPropertyInfo.GetValue(item)
Run Code Online (Sandbox Code Playgroud)
这就是我获得Foo类型的方式
listPropertyInfo.GetValue(item).GetType().GenericTypeArguments[0]
Run Code Online (Sandbox Code Playgroud)
这是我尝试但无法成功的原因
Convert.ChangeType(listPropertyInfo.GetValue(item), IList<listPropertyInfo.GetValue(item).GetType().GenericTypeArguments[0]>)
Run Code Online (Sandbox Code Playgroud)
还有这个;
((typeof(IList<>).MakeGenericType(listPropertyInfo.GetValue(item).GetType().GenericTypeArguments.Single())))(listPropertyInfo.GetValue(item))
Run Code Online (Sandbox Code Playgroud)
这是我试图实现的方法
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));
}
}
}
Run Code Online (Sandbox Code Playgroud)
我是这样解决的;
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 });
Run Code Online (Sandbox Code Playgroud)