Выявляет ли отражение, если последний аргумент метода был помечен как «params»?

Используя отражение определения метода, я хотел бы узнать, был ли исходный метод определен с помощью «параметров» для последнего параметра. Итак, могу ли я узнать, было ли исходное определение таким...

public void MyMethod(int x, params object[] args);

...и не это...

public void MyMethod(int x, object[] args);

Мой код имеет список аргументов и использует отражение для вызова произвольного метода. Если он отмечен «параметрами», я хочу упаковать дополнительные параметры в объект [] и вызвать метод. Если аргумент не помечен как «параметры», вместо этого я бы указал на ошибку. Поэтому я хочу обеспечить ту же семантику, что и C#.

Но я не могу найти никаких документов, которые указывают, как обнаружить это с помощью отражения.


person Phil Wright    schedule 31.10.2008    source источник


Ответы (1)


arrow_upward
12
arrow_downward

Используйте атрибут 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));
        }
    }
}
person aku    schedule 31.10.2008