通过反射验证方法调用的一组参数的最简单方法是什么?



我想知道验证具有MethodInfo调用和对象[]的对象数组的参数类型的最简单(或本机)方法是什么。

的例子:

假设我有一个方法Foo,它接收一个int类型的形参。通过反射,我获得了方法的MethodInfo,从那里我可以调用调用传递一个对象数组。

如果我调用调用传递一个对象数组与单个int,它将是好的。如果我调用调用传递一个数组的对象上有两个字符串,它不会是好的。

如何确保调用传递的对象与方法参数类型兼容

在一般情况下,这可能相当复杂——本质上,您将实现编译器的一部分。幸运的是,Type.IsAssignableFrom非常了解类型转换,因此合理的第一次尝试是

var compatible = methodInfo.GetParameters().Select(p => p.ParameterType)
                     .Zip(objArray, Tuple.Create)
                     .All(t => t.Item1.IsAssignableFrom(t.Item2.GetType()));

这将从MethodInfo中获得形式参数的类型,将它们与手头的实际对象配对,并确认每个对象都可以分配给相应类型的变量。

相关内容

最新更新