Home  >  Article  >  Backend Development  >  Detailed explanation on the use of anonymous delegates and Lambda expressions in C#

Detailed explanation on the use of anonymous delegates and Lambda expressions in C#

黄舟
黄舟Original
2017-09-02 14:40:581373browse

This article mainly introduces the relevant information of C# anonymous delegates and Lambda expressions in detail. It has certain reference value. Interested friends can refer to

By using anonymous delegates (anonymous method), making programming more flexible. For details about delegation and anonymous delegation, please refer to my previous blog "Delegation and Anonymous Delegation".

Continue with the previous example, the code is as follows:


static void Main(string[] args)
{

   Worker.TwoNumberHandleMethodDelegate method = delegate(int a, int b)
  {
   return a + b;
  };
   Worker worker = new Worker();
   int result = worker.HandleTwoNumber(10, 10,method);

   Console.WriteLine(String.Format("Result:{0}", result));

   Console.ReadLine();
}

The above program worker will calculate the result and return it according to the parameters and calculation method (method) given by Main. . The code can be further simplified based on the equivalence, as follows:


 static void Main(string[] args)
  {
   Worker worker = new Worker();
   int result = worker.HandleTwoNumber(10, 10, delegate (int a, int b)
   {
    return a + b;
   });

   Console.WriteLine(String.Format("Result:{0}", result));

   Console.ReadLine();
  }

Friends who have experience in js and jquery development may feel familiar when seeing this, oh... Anonymous function. $("#id").click(function(){..........}) is used everywhere in jquery.

Anonymous delegates in C# can be further simplified when used, and the result of further simplification becomes an expression, called a Lambda expression.


static void Main(string[] args)
  {

   Worker.TwoNumberHandleMethodDelegate method = delegate(int a, int b)
  {
   return a + b;
  };
}

Lambda expression expression:


static void Main(string[] args)
  {

   Worker.TwoNumberHandleMethodDelegate method = (a, b)=>
  {
   return a + b;
  };
}

C# Lambda expression usage => is divided into two parts: before and after , (a, b) is the parameter list, {....} is the method body.


 static void Main(string[] args)
  {
   Worker worker = new Worker();
   int result = worker.HandleTwoNumber(10, 10, (a, b) =>
   {
    return a + b;
   });

   Console.WriteLine(String.Format("Result:{0}", result));

   Console.ReadLine();
  }

The methods given below are compared with Lambda expression conversion


private void A1()
    {
      Console.WriteLine("....");
    }
//Lambda
()=>{Console.WriteLine("....");};
//如果方法体代码只有一句,如上还可省去方法体大括号
()=>Console.WriteLine("....");


private string A2(int a, int b)
    {
      return String.Format("{0}+{1}={2}", a, b, a + b);
    }
    //如上示例可简化为
    (a,b)=>{return String.Format("{0}+{1}={2}", a, b, a + b);}
    //因为方法体只有一句,可进一步简化
    (a,b)=> String.Format("{0}+{1}={2}", a, b, a + b);
    //此时注意return应该去掉,C#编译器自动识别=>做返回值


private string A3(int a)
    {
      return String.Format("{0}", a);
    }
    //上面示例可简化为
    (a)=>String.Format("{0}", a);
    //如果参数列表只有一个参数,参数列表的()可以去掉,上面进一步简化为
    a=>String.Format("{0}", a);

Through this article, you may have realized that in C#, there is no obvious boundary between methods, delegates, anonymous methods, and lambda expressions, and they can be flexibly converted. In actual development, there are many knowledge points about delegation, such as delegation and events. If time permits, I hope to write an article about deepening the commission.

The above is the detailed content of Detailed explanation on the use of anonymous delegates and Lambda expressions in C#. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn