6
votes

Quel est => opérateur dans ce code

J'utilise ThreadPool avec le code Follwoing: - xxx

Je ne suis pas sûr de quoi o => est dans ce code. Quelqu'un peut-il m'aider?


2 commentaires

Je pense que vous voulez dire () => myfunction () , il s'agit d'une lambda sans paramètre


@MYSTERE Man QueueUserMorworkItem s'attend à une instance de WaitingCallback, qui est un délégué pour des méthodes qui prennent et s'opposent et renvoient nulle. Donc, bien que étrange, la signature est correcte.


3 Réponses :


11
votes

Il décrit une fonction lambda (anonyme). Dans ce cas, il s'agit d'une fonction qui prend un argument, O, puis exécute une mycée (bien que dans ce cas, il s'agisse essentiellement de la valeur de O à distance). C'est équivalent à:

void Foo(object o) //We know that Foo takes an object and returns void because QueueUserWorkItem expects an instance of type WaitCallback which is a delegate that takes and object and returns void
{
  MyFunction();
}

ThreadPool.QueueUserWorkItem(Foo) // or ThreadPool.QueueUserWorkItem(new WaitCallback(Foo));


3 commentaires

Juste pour clarifier, => est l'opérateur et o est le paramètre étant transmis. J'ai un coup d'œil à msdn.microsoft.com/en-us/library/bb397687.aspx Pour plus de détails.


@LZCD: Je ne l'appellerais pas un opérateur. C'est juste la syntaxe qui sépare les paramètres du corps de la Lambda.


Si je comprends bien, alors si je veux passer des paramètres à ma fonction, je peux le faire comme ceci: - Threadpool.QueueUeUserMorworkItem (O => MyFunction (O));



2
votes

Il déclare une méthode anonyme. Fondamentalement, vous passez une méthode dont le corps est {mysculation (); } code> en tant que paramètre sur la méthode de WeeuUserSerWorkItem. Je n'ai pas vérifié, mais il devrait également être également équivalent à:

ThreadPool.QueueUserWorkItem(MyFunction);


1 commentaires

Pas tout à fait je ne pense pas. QueueUserWorkItem s'attend à ce qu'un délégué accepte un objet comme argument; Par conséquent, Emballage MyFunction dans une Lambda.



3
votes

Ceci est la syntaxe C # pour une expression Lambda.

  • http://msdn.microsoft.com/en-us/library /bb397687.aspx li> ul>

    Il est à bien des égards une définition de déléguée en ligne. Cela vous permet de définir une fonction supplémentaire à utiliser comme cible de délégué. P>

    private object Target(object state) {
      MyFunction();
    }
    
    ...
    ThreadPool.QueueUserWorkItem(new WaitCallback(Target));
    


0 commentaires