【问题标题】:MethodInvoke delegate or lambda expressionMethodInvoke 委托或 lambda 表达式
【发布时间】:2011-10-13 07:03:13
【问题描述】:

两者有什么区别?

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

【问题讨论】:

    标签: c# delegates lambda invoke method-invocation


    【解决方案1】:

    1) lambda 表达式更短更简洁

    2) 是的

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

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

    【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 2010-10-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-03-06
        • 2011-08-14
        相关资源
        最近更新 更多