2011-10-13 34 views
12

¿Cuál es la diferencia entre los dos?Delegado de MethodInvoke o expresión 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(); 
     } 
    ) 
); 

¿Hay alguna razón para usar la expresión lambda? ¿Y es (MethodInvoker) el delegado de casting y lambda en el tipo MethodInvoker? ¿Qué tipo de expresión no requeriría un elenco (MethodInvoker)?

Respuesta

16

1) La expresión lambda es algo más corto y más limpio

2) Sí

3) Se puede utilizar el tipo de acción, así:

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

Veo, el tipo de acción. ¿Alguna diferencia en el uso del tipo de acción frente al lanzamiento? – Jack

+0

aquí hay una discusión sobre acción vs methodinvoker: http://stackoverflow.com/questions/1167771/methodinvoker-vs-action-for-control-begininvoke – hcb

+0

No estaba enterado de esto, gracias amigo! – TheGateKeeper

2

Los dos enfoques son equivalentes. El primero se conoce como método anónimo y es una capacidad anterior de .NET 2.0. La lambda no debería requerir un yeso.

Preferiría la lambda, porque tiene un uso más ubicuo en el desarrollo moderno de C#/.net. El delegado anónimo no ofrece nada sobre la lambda. El lambda permite la inferencia de tipo, que en algunos casos va desde lo conveniente a lo necesario.

1

MethodInvoker proporciona un delegado simple que se usa para invocar un método con una lista de parámetros vacíos. Este delegado se puede usar cuando se realizan llamadas al método Invoke de un control, o cuando se necesita un delegado simple pero no se quiere definir uno.

una acción, por otro lado, puede tomar hasta 4 parámetros.

Cuestiones relacionadas