Que signifie la syntaxe ‘=>’ en C #?

Je viens de lire cette syntaxe dans certaines des questions de ce forum, mais Google et tout autre moteur de recherche ont tendance à bloquer tout sauf les lettres et les chiffres dans la recherche, il est donc impossible de rechercher “=>”.

Alors, quelqu’un peut-il me dire ce que c’est et comment il est utilisé?

C’est l’opérateur lambda.

De C # 3 à C # 5, ceci n’était utilisé que pour les expressions lambda . Celles-ci sont fondamentalement une forme plus courte des méthodes anonymes introduites dans C # 2, mais peuvent également être converties en arbres d’expression .

Par exemple:

Func nameProjection = p => p.Name; 

est équivalent à:

 Func nameProjection = delegate (Person p) { return p.Name; }; 

Dans les deux cas, vous créez un délégué avec un paramètre Person , en retournant le nom de cette personne (sous forme de chaîne).

Dans C # 6, la même syntaxe est utilisée pour les membres à expression , par exemple

 // Expression-bodied property public int IsValid => name != null && id != -1; // Expression-bodied method public int GetHashCode() => id.GetHashCode(); 

Voir également:

  • Quelle est la différence entre les méthodes anonymes (C # 2.0) et les expressions lambda (C # 3.0)
  • Qu’est ce qu’un Lambda?
  • C # expression Lambda, pourquoi devrais-je l’utiliser?

(Et en effet beaucoup de questions similaires – essayez les balises lambda et lambda-expressions .)

Cela signifie génial. Par exemple

 x => x + 1 

représente une méthode qui prend x comme paramètre et en renvoie le successeur.

 button.Click += new EventHandler((sender, e) => methodInfo.Invoke(null, new object[] { sender, e })); 

assigne un gestionnaire d’événement à un bouton en appelant une méthode détenue par MethodInfo.

C’est une autre forme de notation de fonction. Les éléments suivants sont à peu près équivalents:

 // explicit function int MyFunc(int pParam) { return pParam; } // delegate function Func MyFunc = delegate(int pParam) { return pParam; }; // lambda expression Func MyFunc = x => x; 

Pensez à une expression lambda disant: “donne quelque chose, retourne quelque chose”. Dans l’exemple ci-dessus, la fonction x => x indique “donné x, retour x”. (Bien que les expressions lambda n’aient pas nécessairement besoin de renvoyer quelque chose, auquel cas vous pouvez les lire comme “étant donné x, faites quelque chose avec x”.)

voici un exemple simple de msdn

 delegate int del(int i); del myDelegate = x => x * x; int j = myDelegate(5); //j = 25 

Tout ce qui précède le => sont les parameters d’entrée, et tout ce qui suit est l’expression. Vous pouvez avoir plusieurs parameters d’entrée. Les Lambdas sont principalement utilisés avec Linq.

Au lieu d’utiliser une méthode anonyme comme celle-ci:

 somevar.Find(delegate(int n) { if(n < 10) return n; }); 

vous écrivez simplement comme ceci:

 somevar.Find(n => n < 10); 

Il faudra le type de données en fonction de la valeur de retour.

Cela signifie fondamentalement “va dans”, comme un paramètre

 MyObjectReference => MyObjectReference.DoSomething() 

En général, vous les utilisez pour transmettre des fonctions dans des méthodes en tant que parameters ou dans des instructions LINQ

 MyCollection.Where(myobj => myobj.Age>10) 

Par exemple.

Cela fait partie de la syntaxe d’une expression lambda. Une expression lambda est essentiellement une forme abrégée d’un délégué ou d’une méthode anonyme. Pour illustrer, supposons que j’ai un tableau de chaînes correspondant aux lettres de l’alphabet. Je pourrais choisir les membres de ce tableau qui contenaient des valeurs supérieures à “E” avec l’expression LINQ suivante:

var someLetters = alphabet.Where (l => l> “E”);

La partie de l’expression lambda située à gauche du “=>” identifie le nom de la variable pour le test (qui est défini sur les membres individuels de l’alphabet) et la partie de l’expression lambda située à droite du “=>” identifie le traitement. Dans ce cas, le traitement produit une valeur booléenne que la logique Where utilise pour déterminer si chaque membre de l’alphabet est transmis au tableau someLetters.