Можно ли использовать лямбда-выражение с ключевым словом params? - PullRequest
4 голосов
/ 19 сентября 2010

Допустим, у меня есть следующий код:

delegate int MyDel (int n);   // my delegate

static int myMethod( MyDel lambda, int n) { 
    n *= n;
    n = lambda(n);
    return n;      // returns modified n
}

Таким образом, имея другое лямбда-выражение, я могу настроить вывод метода.

myMethod ( x => x + 1, 5);
myMethod ( x => x - 1, 5);

Теперь, если я не наденуне хочу делать арифметику в лямбда-выражении, я мог бы использовать:

myMethod ( x => x, 5);  // and lambda will simply return x

Мой вопрос: есть ли способ использовать лямбда-выражение с необязательными свойствами 'params'?Может быть, как-то встраивать мой делегат в массив?

 static int myMethod (int n, params MyDel lambda) { 

Ответы [ 2 ]

3 голосов
/ 19 сентября 2010

Это работает?

РЕДАКТИРОВАТЬ Извините, делал это одним глазом, позвольте мне перефразировать это.

static int myMethod (int n, params  MyDel[] lambdas) {
1 голос
/ 19 сентября 2010

Да, вы можете.

    delegate int MyDelegate(int n);
    static void MyMethod(int n, params MyDelegate[] handlers)
    {
        for (int i = 0; i < handlers.Length; i++)
        {
            if (handlers[i] == null)
                throw new ArgumentNullException("handlers");
            Console.WriteLine(handlers[i](n));
        }
    }

    static void Main(string[] args)
    {
        MyMethod(1, x => x, x => x + 1);
        Console.Read();
    }

Выход:

1

2

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...