2011-10-13 48 views
12

两者之间的区别是什么?MethodInvoke委托或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(); 
     } 
    ) 
); 

是否有任何理由使用lambda表达式?并且(MethodInvoker)将代理和lambda转换为MethodInvoker类型?什么样的表达不需要(MethodInvoker)演员?

回答

16

1)lambda表达式是稍短和清洁

2)是

3)你可以使用操作类型,这样的:

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

我看到了Action类型。使用Action类型和cast类型有什么区别? – Jack

+0

这里是关于动作vs methodinvoker的讨论:http://stackoverflow.com/questions/1167771/methodinvoker-vs-action-for-control-begininvoke – hcb

+0

不知道这一点,谢谢队友! – TheGateKeeper

2

这两种方法是等价的。第一种被称为匿名方法,并且是较早的.net 2.0功能。 lambda不应该需要强制转换。

我更喜欢lambda,因为它在现代C#/。net开发中有着更普遍的用途。匿名委托不提供任何超过lambda的。 lambda允许进行类型推理,从某些情况下,这种推理的范围从方便到必要。

1

MethodInvoker提供了一种简单的委托那用于调用带有void参数列表的方法。这个委托可以在调用控件的Invoke方法时使用,或者当你需要一个简单的委托但不想自己定义一个时。

另一方面,操作最多可能需要4个参数。

相关问题