2010-09-19 92 views
4

可以说我有以下代码:我可以在params关键字中使用lambda表达式吗?

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

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

通过这种方式,具有不同lambda表达式我可以调整方法的输出。

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

现在,如果我不想做lambda表达式任何aritmethic,我可以使用:

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

我的问题是,是否有使用与“PARAMS拉姆达expresion方式'可选属性?也许以某种方式嵌入我的委托数组?

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

回答

3

这工作?

编辑 对不起,这是一只眼睛做这个,让我改述一下。

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

我认为它应该是'PARAMS MyDel [] lambdas' – 2010-09-19 16:32:40

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

输出:

相关问题