c# – 使用GenericTypeArgument在运行时更改类型

发布时间:2020-02-24 发布网站:脚本之家
价值2580元廖雪峰前端视频终终终于免费啦!
脚本之家收集整理的这篇文章主要介绍了c# – 使用GenericTypeArgument在运行时更改类型脚本之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
这是我想要得到的
(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 });

总结

以上是脚本之家为你收集整理的c# – 使用GenericTypeArgument在运行时更改类型全部内容,希望文章能够帮你解决c# – 使用GenericTypeArgument在运行时更改类型所遇到的程序开发问题。

如果觉得脚本之家网站内容还不错,欢迎将脚本之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您喜欢交流学习经验,点击链接加入脚本之家官方QQ群:1065694478