两者有什么区别?
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)
演员?
答案 0 :(得分:20)
1)lambda表达式更短更清晰
2)是的
3)您可以使用Action类型,如下所示:
Invoke(new Action(
() =>
{
checkedListBox1.Items.RemoveAt(i);
checkedListBox1.Items.Insert(i, temp + validity);
checkedListBox1.Update();
}
)
);
答案 1 :(得分:3)
这两种方法是等价的。第一种称为匿名方法,是早期的.net 2.0功能。 lambda不应该需要演员。
我更喜欢lambda,因为它在现代C#/ .net开发中的使用更为普遍。匿名代表不提供lambda上的任何内容。 lambda允许类型推断,在某些情况下从方便到必要。
答案 2 :(得分:2)
MethodInvoker提供了一个简单的委托,用于调用带有void参数列表的方法。在调用控件的Invoke方法时,或者当您需要一个简单的委托但不想自己定义委托时,可以使用此委托。
另一方面,动作可能最多需要4个参数。