代码之家  ›  专栏  ›  技术社区  ›  kofucii

我可以使用带有params关键字的lambda表达式吗?

  •  4
  • kofucii  · 技术社区  · 14 年前

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

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

    我的问题是,有没有一种方法可以将lambda表达式与“params”可选属性一起使用?可能是把我的代理嵌入数组了?

     static int myMethod (int n, params MyDel lambda) { 
    
    2 回复  |  直到 14 年前
        1
  •  3
  •   Joachim VR    14 年前

    这有用吗?

    static int myMethod (int n, params  MyDel[] lambdas) {
    
        2
  •  1
  •   Cheng Chen    14 年前

    是的,你可以。

        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