2011-10-13 2 views
12

Quelle est la différence entre les deux?Délégué MethodInvoke ou expression lambda

Invoke((MethodInvoker) delegate { 
     checkedListBox1.Items.RemoveAt(i); 
     checkedListBox1.Items.Insert(i, temp + validity); 
     checkedListBox1.Update(); 
    } 
); 

vs

Invoke((MethodInvoker) 
    (
     () => 
     { 
      checkedListBox1.Items.RemoveAt(i); 
      checkedListBox1.Items.Insert(i, temp + validity); 
      checkedListBox1.Update(); 
     } 
    ) 
); 

Y at-il raison d'utiliser l'expression lambda? Est-ce que (MethodInvoker) dicte le délégué et lambda dans le type MethodInvoker? Quel genre d'expression ne nécessiterait pas une distribution (MethodInvoker)?

Répondre

16

1) L'expression lambda est un peu plus courte et plus propre

2) Oui

3) Vous pouvez utiliser le type d'action, comme ceci:

Invoke(new Action(
    () => 
    { 
     checkedListBox1.Items.RemoveAt(i); 
     checkedListBox1.Items.Insert(i, temp + validity); 
     checkedListBox1.Update(); 
    } 
) 
); 
+0

Je vois, le type d'action. Des différences dans l'utilisation du type d'action par rapport à la diffusion? – Jack

+0

Voici une discussion sur l'action vs methodinvoker: http://stackoverflow.com/questions/1167771/methodinvoker-vs-action-for-control-begininvoke – hcb

+0

N'a pas conscience de cela, merci mate! – TheGateKeeper

2

Les deux approches sont équivalentes. Le premier est connu comme une méthode anonyme, et est une capacité antérieure de .net 2.0. Le lambda ne devrait pas nécessiter de plâtre.

Je préférerais le lambda, parce qu'il a une utilisation plus omniprésente dans le développement moderne C# /. Net. Le délégué anonyme n'offre rien sur le lambda. Le lambda permet l'inférence de type, qui va de pratique à nécessaire dans certains cas.

1

MethodInvoker fournit un délégué simple est utilisé pour invoquer une méthode avec une liste de paramètres void. Ce délégué peut être utilisé lorsque vous appelez la méthode Invoke d'un contrôle, ou lorsque vous avez besoin d'un délégué simple mais que vous ne voulez pas en définir vous-même.

Une action d'autre part peut prendre jusqu'à 4 paramètres.