我想知道什么是验证具有要调用的MethodInfo和对象[]的对象数组的参数类型的最简单(或本机)方式。
示例:
让我说我有一个接收int类型参数的方法Foo。 通过反射我获得了方法的MethodInfo,从那里我可以调用invoke传递一个对象数组。
如果我调用invoke传递一个带有单个int的对象数组,那么它会没问题。 如果我调用invoke传递一个带有2个字符串的对象数组,那就不行了。
如何确保传递的调用对象与方法参数类型兼容。
答案 0 :(得分:4)
在一般情况下,这可能非常复杂 - 本质上,您将实现编译器的一部分。幸运的是Type.IsAssignableFrom
对类型转换了解很多,所以合理的第一次尝试将是
var compatible = methodInfo.GetParameters().Select(p => p.ParameterType)
.Zip(objArray, Tuple.Create)
.All(t => t.Item1.IsAssignableFrom(t.Item2.GetType()));
这会从MethodInfo
中获取正式参数的类型,将它们与手头的实际对象配对,并确认每个对象都可以分配给相应类型的变量。