MethodInvoke委托或Lambda表达式

16
这两者之间有什么区别?
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个回答

26

1) lambda表达式更简洁

2) 是的

3) 你可以使用Action类型,像这样:

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

我明白,Action类型。使用Action类型和强制转换有什么区别吗? - Jack
1
这里有一个关于Action和MethodInvoker的讨论:https://dev59.com/CnM_5IYBdhLWcg3w6X5e - hcb

3

这两种方法是等效的。第一种方法被称为匿名方法,是较早的.net 2.0功能。Lambda不需要进行转换。

我更倾向于使用lambda,因为它在现代C#/.net开发中具有更广泛的应用。匿名委托没有比lambda更好的选择。Lambda允许类型推断,在某些情况下,这是方便或必要的。


2

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

另一方面,Action可以带有最多4个参数。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接