我使用反射来调用基于用户输入到我的应用程序的脚本的方法。在尝试将脚本标记映射到MethodInfo
对象时,我想过滤掉使用params
关键字的方法,因为这些函数的参数验证与具有固定数量参数的函数的验证不同。 / p>
public double Average (params double [] parameters) {...}
在反射中,参数类型仅显示double []
,并且没有迹象表明在编译时指定了params
。我是否遗漏了某些内容,或者在编译期间丢失了这些信息。目标是找出函数是否打算使用可变数量的参数。
任何指针都会受到赞赏。
答案 0 :(得分:2)
可以在方法的参数中找到该信息 - 而不是MethodInfo
。
因此,您应该检查ParameterInfo
是否饰有[ParamArrayAttribute]
。由于params modifier只能应用于方法的最后一个参数,我认为这样的事情应该有效:
public bool MethodHasParams(MethodInfo mi) {
var lastParameter = mi.GetParameters().LastOrDefault();
if(lastParameter == null) return false;
return lastParameter.GetCustomAttributes(typeof (ParamArrayAttribute), false).Length > 0;
}