如果方法的最后一个参数标记为'params',反射是否会暴露?

Phi*_*ght 4 c# reflection

在方法定义上使用反射我想知道原始方法是否在最后一个参数上使用'params'定义.那么我能否发现原始定义是否是这个......

public void MyMethod(int x, params object[] args);
Run Code Online (Sandbox Code Playgroud)

......而不是......

public void MyMethod(int x, object[] args);
Run Code Online (Sandbox Code Playgroud)

我的代码有一个参数列表,并使用反射来调用任意方法.如果它标有'params',那么我想将额外的参数打包到一个对象[]中并调用该方法.如果参数没有用'params'标记,那么我会指出错误.所以我想提供与C#相同的语义.

但我找不到任何指示如何使用反射发现这个的文档.

aku*_*aku 12

使用ParamArrayAttribute属性

class Program
{
    public void MethodWithParams(object param1, params int[] param2) 
    {            
    }

    static void Main(string[] args)
    {
        var method = typeof(Program).GetMethod("MethodWithParams");
        var @params = method.GetParameters();
        foreach (var param in @params) 
        {
            Console.WriteLine(param.IsDefined(typeof(ParamArrayAttribute), false));
        }
    }
}
Run Code Online (Sandbox Code Playgroud)