MethodInvoke委托或lambda表达式

时间:2011-10-13 07:03:14

标签: c# delegates lambda invoke method-invocation

两者有什么区别?

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)演员?

3 个答案:

答案 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个参数。