通过反射验证方法调用的一组参数的最简单方法是什么?
本文关键字:方法 一组 参数 最简单 是什么 反射 验证 调用 | 更新日期: 2023-09-27 18:13:19
我想知道验证具有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
中获得形式参数的类型,将它们与手头的实际对象配对,并确认每个对象都可以分配给相应类型的变量。