Bezdepbonusu7Программирование: статьи и ответы

Вопрос

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

Автор вопроса: Phil WrightОтветов: 1

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

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

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

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

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

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

reflection

Ответы

Ответ 1 · рейтинг 12 · aku

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

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы