J'ai besoin d'écrire une fonction de déléguée qui peut "envelopper" certains tandis que / essayer / attraper du code autour d'un appel de base UDP pour vérifier le lien. Je l'ai fait fonctionner pour Func pour une fonction qui n'a aucun argument, mais je ne peux pas le faire travailler pour une action, qui a un argument (mais pas de retour). Je ne peux pas sembler passer dans l'argument de manière logique sans le compilateur qui se plaint.
Est-ce que je vais tout cela mal? Je suis nouveau à C # et j'essaie essentiellement d'immerger l'idée d'un pointeur de la fonction. Devrais-je ne pas surcharger cette fonction? Je sais que vous ne pouvez pas surcharger des délégués (je suppose que c'est pourquoi la fonction de fonctionnement et d'action). P>
Ceci fonctionne: P>
udpCommand<uint>(someUdpCommand);
4 Réponses :
Je pense que vous avez juste besoin de sortir la (T-valeur) après la "commande". p>
Le compilateur se plaint avec ou sans le T.
HMMM Je pense que parce que la question était un peu ambiguë, mais j'aurais dû réaliser que vous essayiez de transmettre l'argument à l'action. Je suis d'accord avec la solution fournie dans votre réponse acceptée, qui passe simplement une valeur T également (bien que non entre parenthèses). Si vous aviez "valeur" disponible dans le bloc du code, je pense que cela aurait fonctionné ok.
Ah, oui, je crois que cela fonctionnerait aussi. Merci pour les commentaires.
Voulez-vous dire: avec appelant: p> Notez que cela peut mieux fonctionner sur C # 3.0, qui peut fonctionner plus générique. Type Inference que c # 2.0. P> P>
Aha! Celui-ci semble fonctionner ... au moins le compilateur ne se plaignait plus. Les exemples de Microsoft ne couvrent pas vraiment mon cas d'utilisation. Heureusement j'utilise c # 3.0. Le kilométrage peut varier sur C # 2.0.
essayez-vous de faire cela ... alors cela fonctionnerait comme ceci ... p>
Si vous voulez que cela soit suffisamment générique pour gérer un nombre quelconque d'arguments, essayez d'utiliser le délégué d'action non-genernique: en C # 3.0, vous pouvez l'appeler comme ceci: < / p> in c # 2.0 C'est un peu plus laid: p> ceci vous donne une exécution différée sans vous enfermer dans une signature de méthode particulière . P> EDIT FORT> P> Je remarque que j'ai un peu volé le commentaire de Marc Gravell ... excuses marc. Pour répondre à la manière dont vous pourriez réduire votre duplication, vous pouvez avoir la méthode code> action code> appelez la méthode Je crois (et je me tromperais peut-être) que le retour de 0 n'est pas plus coûteux que (implicitement) de retourner non vides, mais je peux être un chemin ici. Même cela a un coût, cela ne mettrait qu'un minuscule notty snoodge supplémentaire sur la pile. Dans la plupart des cas, le coût supplémentaire ne vous causera jamais de chagrin. P> p> func
J'adore cet endroit. Juste ce dont j'avais besoin comme une recrue C # / vs.net. Merci.
Supplémentaire - vous n'avez pas vraiment besoin du t; Vous pouvez simplement prendre
action code> (non argone) et appeler comme: udpcommand ((() => SOMEMETHOD (123));
Cela me permettrait-il d'avoir un nombre varié de paramètres d'entrée à UDPCOMMAND sans surcharger, disons, jusqu'à 4 paramètres? C'est ce que je dois faire. Aurais-je encore besoin d'une fonction de fonctionnement et d'une action?