Maison  >  Article  >  développement back-end  >  Explication détaillée sur l'utilisation de délégués anonymes et d'expressions Lambda en C#

Explication détaillée sur l'utilisation de délégués anonymes et d'expressions Lambda en C#

黄舟
黄舟original
2017-09-02 14:40:581416parcourir

Cet article présente principalement en détail les informations pertinentes sur la délégation anonyme C# et l'expression Lambda. Il a une certaine valeur de référence. Les amis intéressés peuvent s'y référer

En utilisant la délégation anonyme (méthode anonyme), ce qui rend la programmation plus complexe. flexible. Pour plus de détails sur la délégation et la délégation anonyme, veuillez vous référer à mon précédent blog "Délégation et délégation anonyme".

En continuant l'exemple précédent, le code est le suivant :


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

Le travailleur du programme ci-dessus calculera en fonction des paramètres et de la méthode de calcul (méthode) donnée par Main Le résultat est renvoyé. Le code peut être encore simplifié en fonction de l'équivalence, comme suit :


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

Les amis qui ont de l'expérience dans le développement js et jquery peuvent se sentir familiers en voyant cela .. fonction anonyme. $("#id").click(function(){.........}) est utilisé partout dans jquery.

Les délégués anonymes en C# peuvent être davantage simplifiés lorsqu'ils sont utilisés, et le résultat d'une simplification supplémentaire devient une expression, appelée expression Lambda.


static void Main(string[] args)
  {

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

Expression d'expression Lambda :


static void Main(string[] args)
  {

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

L'expression C# Lambda utilise => parties avant et arrière, (a, b) est la liste des paramètres et {....} est le corps de la méthode.


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

La méthode donnée ci-dessous est comparée à la conversion d'expression Lambda


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

Grâce à cet article, vous avez peut-être réalisé qu'en C#, il n'y a pas de distinction claire entre les méthodes, les délégués, les méthodes anonymes et les expressions lambda. converti de manière flexible entre. Dans le développement actuel, il existe de nombreux points de connaissance sur la délégation, tels que la délégation et les événements. Si le temps le permet, j’espère écrire un article sur l’approfondissement de la commission.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn