Представляет ли отражение, если последний аргумент для метода был помечен как «params»? - PullRequest
4 голосов
/ 31 октября 2008

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

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

... а не это ...

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

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

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

1 Ответ

11 голосов
/ 31 октября 2008

Использовать 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));
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...