J'ai découvert une nouvelle syntaxe C # et ne comprends pas ce que cela signifie. Voici le code associé à la syntaxe:
1) p> 2) p> Quelle est la signification de la syntaxe de Merci beaucoup. P> P> nouvelle action () code> et quelle est la signification du symbole
=> code> p>
threadpool.Queueuereworkitem code> était
threadpool.QueuUserSerWorkItem (nouveau waiTcallback (impression), "bonjour"); code> mais ici, il affiche
threadpool.queueuereworkItem (() => getqldata ()); code>, alors comment ça va ça marche? Pourquoi
waiTcallback code> manque? S'il vous plaît expliquer en détail. P>
4 Réponses :
regarder p>
encapsule une méthode qui a un paramètre unique et ne renvoie pas un valeur. Vous pouvez utiliser l'action délégué à adopter une méthode en tant que paramètre sans déclarer explicitement un délégué personnalisé. P> blockQuote>
et p>
et Lambda Expressions (Guide de programmation C #) P>
Une expression lambda est un anonyme fonction qui peut contenir des expressions et des déclarations et peuvent être utilisés pour créer des délégués ou un arbre d'expression les types. p>
Toutes les expressions Lambda utilisent la Lambda opérateur =>, qui est lu comme "va à ". Le côté gauche de la Lambda L'opérateur spécifie l'entrée paramètres (le cas échéant) et le côté droit tient l'expression ou la déclaration bloquer. L'expression lambda x => x * x est lu "x va à x fois x." p> blockQuote>
Ceux-ci sont connus sous le nom de Expressions Lambda , qui ne sont pas très différent des délégués en C #. p>
Le Il n'y a rien de spécial sur comme pour () vide () code> Il n'y a pas d'arguments, et qu'est-ce que c'est entre le (facultatif)
{} code> sont les corps d'expression Lambda. L'opérateur
=> code> associe simplement les deux expressions ensemble pour créer une expression Lambda. En côté, ils sont couramment trouvés dans le code Linq. P>
nouvelle action () code>, juste que c'est un Délégué qui peut mapper une expression de Lambda à elle-même. P>
threadpool.QueueUserSerWorkItem () code>, le
waiTcallback code> argument est un délégué. Vous pouvez transmettre le nom d'un délégué nommé comme argument, transmettez un objet anonyme
délégué code> ou écrire une expression lambda pour cet anonyme
délégué code> (dans votre cas c'est
() => Getqldata () code>). P>
Comme d'autres l'ont dit, c'est une Lambda, qui est fondamentalement une fonction locale anonyme (Sans nom).
Cela pourrait avoir un peu plus de sens si vous regardez un code similaire qui n'utilise pas Lambdas: p> comme pour l'autre code, nous ne devrions normalement pas avoir à faire avec le code plus récent (Cela prend quelque chose comme Notez également que si vous voyez quelque chose comme: nouvelle action code>. Le problème est que la méthode
begininvoke code> prend un
délégué code>, qui est une sorte d'ancienne école et brise la façon dont la plupart des nouveaux codes fonctionnent. P>
action code> ou un type spécifique de délégué, comme
wairscallback code>), vous écrivez une Lambda ou donnez simplement le nom d'une fonction à l'intérieur de votre classe. L'exemple de code que j'ai écrit ci-dessus montre les deux. P>
(action) (() => bla ()) code>, il est joli Beaucoup de même que
nouvelle action (() => bla ()) code>. p> p>
() => Quelqu'un_code i> est une expression de Lambda et est juste un raccourci pour écrire des délégués anonymes. Je pense que votre confusion est causée par trop de façons d'obtenir la même chose.
@Pauli Østerø: Très bien dit :)
threadpool.QueueUeUserSerWorkItem (() => getqldata ()); code> ne compile pas dans mon application de test. Quelle version du fichier .NET est votre projet en utilisant (ou au moins, quelle version de VS)?