确定MethodInfo是否映射到使用`params`关键字的函数

时间:2014-01-20 23:16:31

标签: c# .net parameters delegates params

我使用反射来调用基于用户输入到我的应用程序的脚本的方法。在尝试将脚本标记映射到MethodInfo对象时,我想过滤掉使用params关键字的方法,因为这些函数的参数验证与具有固定数量参数的函数的验证不同。 / p>

public double Average (params double [] parameters) {...}

在反射中,参数类型仅显示double [],并且没有迹象表明在编译时指定了params。我是否遗漏了某些内容,或者在编译期间丢失了这些信息。目标是找出函数是否打算使用可变数量的参数。

任何指针都会受到赞赏。

1 个答案:

答案 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;
}