web-dev-qa-db-ja.com

MethodInvokeデリゲートまたはラムダ式

2つの違いは何ですか?

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();
        }
    )
);

ラムダ式を使用する理由はありますか?そして、(MethodInvoker)はデリゲートとラムダをMethodInvoker型にキャストしていますか? (MethodInvoker)キャストを必要としないのはどのような表現ですか?

15
Jack

1)ラムダ式はやや短くてクリーンです

2)はい

3)次のようなアクションタイプを使用できます。

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

2つのアプローチは同等です。 1つ目は匿名メソッドと呼ばれ、以前の.net2.0機能です。ラムダはキャストを必要としないはずです。

ラムダは、現代のC#/。net開発でよりユビキタスに使用されているため、私はラムダを好みます。匿名デリゲートはラムダを介して何も提供しません。ラムダは、便利なものから必要な場合までの範囲の型推論を可能にします。

3
Brent Arias

MethodInvokerは、voidパラメーターリストを使用してメソッドを呼び出すために使用される単純なデリゲートを提供します。このデリゲートは、コントロールのInvokeメソッドを呼び出す場合、または単純なデリゲートが必要であるが自分で定義したくない場合に使用できます。

一方、アクションは最大4つのパラメーターを取ることができます。

2
Ryder