2010-09-19 2 views
4

Допустим, у меня есть следующий код:Могу ли я использовать выражение лямбда с ключевым словом params?

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); 

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

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

Мой вопрос, есть ли способ, чтобы использовать лямбда expresion с «Params 'Дополнительные свойства? Может быть, каким-то образом внедрить мой делегат в массив?

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

ответ

3

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

EDIT Извините, делал это одним глазом, позвольте мне перефразировать это.

static int myMethod (int n, params MyDel[] lambdas) { 
+1

Я думаю, что это должно быть 'PARAMS MyDel [] lambdas' –

1

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

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(); 
    } 

Выход:

Смежные вопросы