16

两者有什么区别?

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

对比

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

有什么理由使用 lambda 表达式吗?并将(MethodInvoker)委托和 lambda 转换为 MethodInvoker 类型吗?什么样的表达不需要(MethodInvoker)演员表?

4

3 回答 3

26

1) lambda 表达式更短更简洁

2) 是的

3)您可以使用 Action 类型,如下所示:

Invoke(new Action(
    () => 
    {
        checkedListBox1.Items.RemoveAt(i);
        checkedListBox1.Items.Insert(i, temp + validity);
        checkedListBox1.Update();
    }
)
);
于 2011-10-13T07:07:18.703 回答
3

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

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

于 2011-10-13T07:05:05.010 回答
2

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

另一方面,一个动作最多可以有 4 个参数。

于 2012-04-14T08:47:47.047 回答